Enum deserialization, and some design fixes (sealed IDisposable, throw e; -> throw;)