* Separate interfaces for each lifecycle hook
Having one required hook per interface leads to greater type safety than
having a single IController interface with all properties optional.
Namely, the IController interface will not help you if you misspell a hook
name. (A slight improvement, admittedly, but an improvement nonetheless.)
This is closer to how the typings are done for lifecycle hooks in ng2.
* Use `dtslint`
* Fix trailing whitespace
$timeout is not correctly described by ITimeoutService,
causing compile time errors like: 'TS2322:Type 'IPromise<IPromise>' is not
assignable to type 'IPromise'...'