Перечисления по определению являются дискретным входом, для таких арифметические операции просто не определены. Если хочешь доопределить, это другой вопрос, но тут же встаёт новый: зачем оно понадобилось, не баг ли это в архитектуре?
Описанная библиотека совсем не про арифметические операции с ними.
Ото ты не знаешь. Никто, кроме самого класса, не может знать лучше, как сохранить его состояние и как в дальнейшем восстановить.
Никто. Но в over99% случаев подойдёт "вызовем сериализацию всех полей, кроме ...". Писать такое руками не намного более интеллектуальное занятие, чем самому расставлять всякие финализаторы по выходу из скопа вместо того, чтобы заюзать raii. И даже если такая тупая реализация тебе по каким-то причинам не подходит, в нормальных языках ты всегда можешь реализовать её так, как это нужно конкретно для этого класса. Так что возможность написать это нормально без костылей - маст хев.