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.
Although `addIdentifier` looks like a "cheap" operation anyway, couldn't we avoid calling it twice, by omitting the call on [line 125][1] and move this one after the `if` block ?

[1]: https://github.com/angular/angular.js/pull/10502/files#diff-39f7f76ebd18c5a040b9413a98410197R125