[WIP] formatter refactored

refactored date formatting functions based on #3790

fixes #2359

- removed unformat methods, they do not belong here
- removed db format, which is also not purpose of this class
- refactored the whole set of methods to be simpler and better
  maintainable

More unit tests needed.

TODO:

- [x] refactor number formatting functions
- [x] support numberformatter options
- [x] make asSize compatible with number formatting
- [ ] ~~make format config compatible with the datepicker extension~~
- [x] unit tests for date time functoins
- [x] unit tests for number formatting
- [x] update docs public API
- [x] update docs protected API
- [x] update guide
- [x] https://github.com/yiisoft/yii2/commit/f3520187d62a28d5f9d1854f47467b563e6784a6
- [x] https://github.com/yiisoft/yii2/commit/46b553f01245daba6ba6e099bb35e1ebb8d0cb7e
- [x] CHANGELOG + UPGRADE note + rename references

## Changes from the UPGRADE file:

----------------------

* The formatter class has been refactored to have only one class regardless whether PHP intl extension is installed or not.
  Functionality of `yii\base\Formatter` has been merged into `yii\i18n\Formatter` and `yii\base\Formatter` has been
  removed so you have to replace all usage of `yii\base\Formatter` with `yii\i18n\Formatter` in your code.
  Also the API of the Formatter class has changed in many ways.
  The signature of the following Methods has changed:

  - `asDate`
  - `asTime`
  - `asDateTime`
  - `asSize` has been split up into `asSize` and `asShortSize`
  - `asCurrency`
  - `asDecimal`
  - `asPercent`
  - `asScientific`

  The following methods have been removed, this also means that the corresponding format which may be used by a
  GridView or DetailView is not available anymore:

  - `asNumber`
  - `asDouble`

  Also due to these changes some formatting defaults have changes so you have to check all your GridView and DetailView
  configuration and make sure the formatting is displayed correctly.

  The configuration for `asSize()` has changed. It now uses the configuration for the number formatting from intl
  and only the base is configured using `$sizeFormatBase`.

  The specification of the date and time formats is now using the ICU pattern format even if PHP intl extension is not installed.
  You can prefix a date format with `php:` to use the old format of the PHP `date()`-function.


@cebe #4989 isn't the same issue. `strtotime`, `DateTime::getTimeStamp` and `DateTime::setTimeStamp` isn't able to handle dates after 2038 on 32bit systems. Other methods of `DateTime` class are able. So `DateTime::format(@U) instead of getTimeStamp works. Setting a timestamp via constructor works also. The other issue above is a wrongly date deliverd by user and has nothing to do with 2038 bug. My only solution that  I found was to use `DateTime::createFromFormat`. DateTime contructor does gues the format. `createFromFormat`brings `false` if format differs.