new method: active() - check if a component has been initialized
new feature: handle optional arguments with default values (allows for optional dependencies)
add exception on attempted registration after direct assignment
improved error-messages
add missing documentation
add unit tests