[B+C] Add API to use 1.7 chat features. Adds BUKKIT-5245

##### The Issue:
There are currently no easy way to use the new chat features introduced in 1.7.

##### Justification for this PR:
As said before, there are currently no way (except from directly using the ``/tellraw`` command and passing your own generated json to it) to use the 1.7 chat features.

##### PR Breakdown:
This PR adds a builder interface based on a ``RichMessage`` to which you append ``RichMessagePart``s to build a rich chat message containing (or not):
* a multi-color text, an LocalizedText, an ``ItemStack`` name or an ``Achievement`` name ;
* an optional hoverable (showing a multi-color multi-line text, an ``ItemStack`` or an ``Achievement``) ;
* an optional clickable (executing commands / sending chat message, proposing commands / proposing chat message, or opening urls (actually opens the prompt)).

These messages handle colors and formatting using ChatColor just like standard messages, internally using the existing algorithm built by the great @mbax.

Example LocalizedText:
```java
new LocalizedText("commands.scoreboard.players.reset.success", "Notch")
```

Many (**many**) shortcuts have been added to RichMessage to make it easier to append specific elements, see RichMessage constructors, append methods and insert methods.

``RichMessage`` and ``RichMessagePart`` are ``ConfigurationSerializable`` making it easy to save and load them from a config file.

This PR also adds methods to ``Player`` to send a ``RichMessage`` and two methods to ``Server`` and ``Bukkit`` to broadcast a ``RichMessage``. Those methods are mapped on the standards String methods.

Usage examples can be found [in the TestPlugin after this line](https://github.com/Ribesg/TestPlugin/blob/BUKKIT-5245/src/main/java/fr/ribesg/bukkit/testplugin/TestCommandExecutor.java#L63). You can get builds of all of this and test it yourself using the link below.

##### Testing Results and Materials:
[Test Plugin Source](https://github.com/Ribesg/TestPlugin/tree/BUKKIT-5245)
Build everything yourself to test it as we're not allowed to link CB builds here.

##### Relevant PR(s):
B-1065 - https://github.com/Bukkit/Bukkit/pull/1065 - Associated Bukkit PR

##### JIRA Ticket:
BUKKIT-5245 - https://bukkit.atlassian.net/browse/BUKKIT-5245

##### Authors
* @bendem did a lot of things (Mostly Bukkit part)
* @Ribesg did a lot of other things (CB part and Bukkit part)
* @ST-DDT did the Javadocs for multiple Bukkit files
Why don't we move the caching to each RichMessage instance? That way, we
avoid all the complexity of having a WeakHashMap and everything, but we
still cover 90% of caching usecases.


On Thu, Jul 17, 2014 at 12:22 PM, ST-DDT <notifications@github.com> wrote:

> In src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java:
>
> > +    }
> > +
> > +    private static int cachedRichMessageHash = 0;
> > +    private static IChatBaseComponent[] cachedRichMessageConverted;
> > +
> > +    public static IChatBaseComponent[] fromRichMessage(RichMessage message) {
> > +        int hash = message.hashCode();
> > +        if (cachedRichMessageHash == hash) {
> > +            return cachedRichMessageConverted;
> > +        } else {
> > +            IChatBaseComponent[] nmsMessage = new RichChatMessage(message).getOutput();
> > +            cachedRichMessageHash = hash;
> > +            cachedRichMessageConverted = nmsMessage;
> > +            return nmsMessage;
> > +        }
> > +    }
>
> We could limit the WeakHashMap to 100 or so entries.
>
> IChatComponent getConvertedMessage(RichMessage someMessage) {IChatComponent result = map.remove(someMessage);if (result == null) {
>     result = convertMessage(someMessage);
>     map.put(someMessage. result);
>     if (map.size() > 100)
>     Iterator<Entry<RichMessage,IChatComponent>> it = map.iterator();
>     it.remove();}return result;
>
> But i guess a single cache for the start is good enough.
> We can decide later if we should add a real cache.
> (Especially if more and more messages will be moved to resource files)
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/Bukkit/CraftBukkit/pull/1378/files#r15070990>.
>