refactor: simplify injector

Injector does not care whether something is provided as a class or
function. It just calls `provider.create(args)` and it's
a responsibility of the concrete provider to instantiate it as a class
or function.

Therefore the whole "super constructor business" is not responsibility
of injector but rather `ClassProvider`. It normalizes parameters of
all the constructors (so that the injector does not care).
refactor: remove un-implemented invoke()

Not sure why the hell I put it there anyway. We might end up needing it,
but not for now...
fix: resolve promise/lazy from parent injector
refactor: move providers into a separate file
refactor(testing): use providers
feat: remove *Annotation aliases
refactor(annotations): use the same parameter description

Normalize the way annotations are parsed and providers describe their
parameters (as long as provide descriptor):
```js
{
  token: <anything>,
  isPromise: <boolean>,
  isLazy: <boolean>
}
```

Also, add more unit tests for `readAnnotations`
style(annotations): just move some code around