Added @inject support

Constructors are now selected based on @inject annotation. If there is no constructor annotated with @inject, a no-args constructor is used. If there is no no-args constructor, an ArgumentError is thrown.

Fields annotated with @inject are injected after instance construction even if they are not set by the constructor. Final and Static fields with @injected annotation raise exceptions.

Support is not considered stable and tests will be implemented.