3.0 - WIP - Refactor I18n

~~Please ignore the missing / incorrect docblocks for now.~~

 - I created Catalog engine class and moved the po/mo parsing code into Gettext catalog class. This should theoretically allow using alternate backends for storing the translations.

- If a config named same as domain name exits that will be used else 'default' config is used.

- ~~Currently there's a *feature* that for each domain `I18n` first checks if translation is available in core.po. I have not implemented that feature. Is it necessary to keep this feature? I don't think so.~~
Removed.

TODO

- ~~Handling of LC_TIME files is pending. (Hence the failing time tests.)~~
~~I added `Catalog\Locale` class and a special config name `_LC_TIME_`. If this config is present I18n first tries to get translation for LC_TIME category from LC_TIME files else continues to use the catalog configured for the specific domain.~~
Removed again as `Time` class now uses `IntlDateFormatter` and `LC_TIME` file parsing is no longer required.

- There's request for adding "context" support #2063. Is someone willing to update the existing parsing code to account for `msgctxt` tags? If not we can look into using a 3rdparty lib for parsing po files like [PoParser](https://github.com/raulferras/PHP-po-parser) which has support for context. That would probably also require changing the data array format for the translations.
UPDATE: li3 has context support so could borrow code from that.

- The code for generating po files should be moved form the i18n shell into the Gettext catalog class.