fix($compile): respect return value from controller constructor

The return value of the controller constructor is now respected in all cases.

If controllerAs is used, the controller will be re-bound to scope. If bindToController is used, the previous binding $watches (if any) will be unwatched, and bindings re-installed on the new controller.

Blocked on #10467 --- This potentially results in leaks and performance regressions, good review is needed here.
This will make `directive.$$isolateBindings` to be initialized to an empty object (although the `directive.scope` might be `true`.
I think this is not right. We should either throw an error on `{...bindToController: true, scope: true...}` or ignore it and don't initialize `bindings.isolateScope`.