refactor: more readable condition

Wrapping into a promise (when provided non-promise but required a promise) and throwing an error (when required non-promise and provided promise).
feat: inject non-annotated tokens as values

If a token is an object or a non-annotated function/class and there is no other provider defined for this token, the default provider returns the value instead of calling it.

This is helpful for injecting third-party code (without instantiating it) that is not annotated. Eg. Node's native modules:
```js
var fs = require('fs');

@Inject(fs.readFile)
class Foo {
  constuctor(readFile) {}
}
```

Fixes #30

BREAKING CHANGE:
This means that every function/class (that should be called/instantiated) has to be annotated with `@Inject`, even if it takes no arguments.
style: normalize empty lines, Inject on class