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.
We are allowing (I guess deliberately) bindings to be specified for both the controller and the isolate scope (in the same directive).

I.e.:

```js
...
controller: 'MyCtrl as ctrl',
bindToController: {attr1: '@'},
scope: {attr2: '@'},
...
```

will bind `attr1` to the controller and `attr2` to the isolateScope`.

--
If this is indeed deliberate, it is a good idea to have a test about it, to ensure nothing breaks in the future.
<sub>(If it's not deliberate, then we should fix it.)</sub>