Provider

Implement most functionality of `gettextCatalog` as a provider. This allows clients to inject `gettextCatalogProvider` into the `config` phase of Angular's lifecycle. 
We pass in the provider (`self`) [1] as options to the service. The `Catalog` then adds all options as properties on itself (`angular.extend(this, options);`). Thus, the service extends the provider.

[1] This is why I hate the JSCS rule that says anything but `var self = this;` is not allowed. `var provider = this;` would be so much clearer.