Add support for lazy initializated types

Resolves #331.
Would that make the code more or less maintainable?

Can you think of a third alternative?