fix(directives): fix `this` keyword inside link functions

Directive functions `template`, `templateUrl` and `compile` were properly bound to the definition object of the directive, but `link` was not. This made very hard for Coffeescript and Typescript users to have proper "classes" defined (using `class` keyword) because link would not retain the context of `this`. 

Closes #8549