Removed unused import
Prevent obfuscation from interfering with our method calls. Fixes #25.
I effectively implemented what I suggested in my comment on that issue: 
When sending a message to a player:
1) Reflectively obtain the net.minecraft.util.com.google.gson.Gson
instance, which is not stored as an Object, if it has not already been
obtained. Cache the value so we don't have to retrieve it again, as it
is a final field.
2) Call fromJson on the Gson object, passing it the JSON string and the
Class object representing IChatBaseComponent.
3) Create the PacketPlayOutChat instance with the IChatBaseComponent
instance.
4) Send the packet to the player as has been previously implemented.
Maintain a global NMS and OBC cache of types. Addresses  #24.
This results in less local variables, PLUS fixing a major flaw with the
previous cache system: The caches were stored per instance, such that
ALL the classes, even if not needed, were looked up ON CONSTRUCTION of
EACH MessagePart instance. With the new system, the classes are not only
stored in an instance-independent cache, they are also only looked up if
they are needed, so that if functionality is never used by a plugin, it
is not retrieved by name.
Although it is not in the MessagePart or FancyMessage class, this commit
does add documentation to some methods in the Reflection class, which is
publicly exposed, therefore addressing issue #8.
Cache ALL the things. Fixes #24.
This commit goes out of its way to make sure that nobody retrieves
anything twice. All members within Reflection that retrieve objects
reflectively cache those objects after retrieval. For objects which are
not retrieved through that class, caching must be done by the client.
Synchronize members in the Reflection class
If synchronization works as it should and only one thread accesses any
method declared by Reflection at any given time, then it is now
practically guaranteed that reflective caching will work with multiple
threads.