Implement @InjectLazy and @InjectFuture

PR implements:

1. It implements @InjectLazy that enables delayed instantiation.

```
class Parent {
  constructor(@InjectLazy(Child) childFactory:Function) {
    this.child = engineFactory(); // it can be executed conditionally
  }
}
```

2. It implements @InjectFuture:
```
class UserController {
  constructor(@InjectFuture(UserList) userList:Future) {
    this.userList = userList;
  }
}
```

so you can get an instance of UserController synchronously:
```
inject.get(UserController)
```

3. It adds handling of construction errors (e.g., cyclic dependencies).

4. Refactoring.
type "when if"