Lazy Loading via defineProperty

This is some work on top of @nfroidure's awesome start to using `defineProperty` for lazy loading, which should make it seamless to work with lazy-loaded modules that don't just return a function.

It would be nice to find a way to test this behaviour though, anyone got any thoughts on that?

@nfroidure please let me know what you think. I simplified down the lazy loading code a little.