Tagging interface for all types whose implementations need
to be managed at runtime.
Using a java type captures the heirarchical nature of types
and provides type safety.
The heirarchy represents only the broad functional relationship,
between Types.