feat(controller): allow named function syntax when registering controllers

This pull-request means to introduce two new syntax for registering controllers:

```js
$controllerProvider.register(function FooCtrl($scope) {
  // ...
});

$controllerProvider.register(['$sope', function FooCtrl($scope) {
  // ...
}]);
```

As it is shown above, using a named function we can remove the need for the first argument on the controller declaration, which was the controller's name.

This feature relies first on [Function.name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name), which is currently implemented in most major browsers, with the exception of Internet Explorer. Because of that, I have also added a fallback method to get a function's name, which was mostly based on @dfkaye's [Gist](https://gist.github.com/dfkaye/6384439), although I've pretty much skiped the validation part which I think is unecessary for this case.

*P.s.: I've made tests for both use-cases and all test (including e2e) seem to be working just fine.*
[Function.name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name) is not available in IE yet. That's a situation where it would failed.

Another situation would be when we call the register with a unnamed function, what would make `fn.name` be an empty string. That, thought, is not covered in the following syntax as well:

```js
$controllerProvider.register('', function ($scope) {
});
```
 so I decided to let the same error handler act on my case. How do you suggest my code behaves, if I have to handle this error? I'm not much aware of the Angular's error system.