Statistics/Achievements API addition: Events + added getter + setters to Player

**Helper PR for:** https://github.com/SpongePowered/SpongeAPI/pull/220
There is another PR for getting `Statistic`s and `StatisticType`s: https://github.com/SpongePowered/SpongeAPI/pull/317

Added Events
- `GrantAchievementEvent`
- `StatisticChangeEvent`
  - `StatisticChange`
    - `StatisticChangeType` (`ADD`, `SET`, `RESET`)

Added methods to `Player`
- get, set, add, reset, getAll, resetAll `Statistic`s
- has, grant, revoke, revokeAll `Achievement`s

This PR assumes, that there are only `Statistic`s that use `Long` values.

**TBD**
* Remove `StatisticChangeType` / call event only for `ADD` and not for plugins.
* `StatisticChangeEvent` allow `StatisticChange`s to be added by plugins, so that they can be part of the event handling process and are only applied at the end of the event handling process if the event is not cancelled `Iterable`->`Collection`
* Replace `StatisticChange` by an interface
* Move methods from `Player` (online) to `User` (offline)

> In which events would this be implemented for example?

PlayerDamageEntityEvent, PlayerKilledEvent, PlayerPlace/BreakBlockEvent, PlayerItemCraftEvent, Player...Event

> Wouldn't RESET just set the statistic back to 0? If it does you could just use the optional parameters instead to implement cancelling.

`RESET` set it back to the default value. The change type is not changeable in the event itself. And cancelling the event is not similar to resetting the statistic. 
The optional for the set new values is to allow resetting of a value during the event. So if the value is absent after event handling it will be resetted by the event. This was added for stats that are counted for games (you get extra items if you reach a certain score).