Revert "Revert "re-implement Case<T>""

This reverts commit d31cd1419943a86fee2569c107d7a98a6546b714.
Revert "Revert "introduce NamedCase""

This reverts commit dc664762270058e395e7ebd25527936f9de1052e.
Revert "Revert "change property setters from private to protected""

This reverts commit 87083fab5ea8538fbea179c033a2a7068e3ab27c.