Parse JSON when loading sign text NBT

Fixes #528

Still uses plaintext internally, since we don't have a robust json chat parser yet. TextMessage.asPlaintext() is rather primitive too

Saving also uses plaintext for the sake of simplicity. Vanilla handles that correctly, since it's needed when migrating from 1.7 maps.

To test this:

* Start glowstone, place some signs with text and some empty lines
* Load same world in vanilla, save (this turns sign text into json)
* Load same world in glowstone

Old behavior adds `"..."` around lines with content, either `null` or `""` for lines without.

New behavior should show no differences.
Since I know someone's going to complain - yes, this is kinda lame. It keeps the behavior from the old `TextMessage#decode(String)` which returned this dumb fallback string when parsing failed.

Suggestions welcome