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.
Wouldn't we need this `instance` to also be updated, if `result !== instance` ?
(Could this by why you defined `instantiate` as a variable, but then forgot to update it's `instance` property ?)