Enum::HOGE()が常に同じインスタンスを返すようになりました。

Enum::HOGE() === Enum::HOGE() が成り立ちます。
互換性のため、__constructはpublicのままにしています。
TypedObjectがisset()やunset()に対応しました。