Improve tooltip API greatly. Fixes issues #6 and #29.

This PR improves the API for dealing with tooltips. The first change is not using items to represent multiple line tooltips, and instead joining a string with newlines. This prevents the ominous colon/comma bug.

The second change added by this PR is accepting fancy message as a tooltip. The code will validate that the fancy message does not contain tooltip or click data, then it will apply it as a formatted JSON tooltip to the message component.

The final change addressed by this PR is allowing multiple lines of formatted messages. This is implemented by cloning each message component, and adding a `MessagePart` representing `\n` in between each line of formatted text. As a result, one of the features I noted on #23 (cloneability of core objects) was implemented.