Expose individual class remapping in JarRemapper

The JarRemapper constructor is now public; you can create a remapper
with a JarMapping and list of IInheritanceProviders, and then use it
to remap an entire jar with remapJar(), or individual classes using
remapClassFile().
Fix unchecked cast warning on shade-relocation parameter
Cleanup output (cosmetic changes only)
Fix inheritance provider chaining

Previously, each provider would be consulted until a matching parent is
found. This is incorrect and caused spurious warnings with --live
(jar + runtime inheritance), as unmatched classes in the jar would fall
through to the runtime inheritance provider.

Now once a provider returns non-null, no other providers are checked.
null indicates the provider knows nothing about the class and should
ask elsewhere, non-null indicates a definitive list of inheritance
(extends/implements list) classes. Should be slightly faster, too.
Add remapped runtime inheritance provider

RemappedRuntimeInheritanceProvider is similar to RuntimeInheritanceProvider, providing
access to inheritance information at runtime, but class names are remapped before
looking up, and the inheritance is reverse-remapped before returning.

This allows the inheritance to be provided from an obfuscated jar, via the cb2obf
mappings. For example:

java -cp target/SpecialSource-1.2-SNAPSHOT-shaded.jar:mcpc-plus-1.4.7-R0.2-SNAPSHOT-023.jar net.md_5.specialsource.SpecialSource --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1 --shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle --srg-in ../jars/1.4.7/cb2obf.csrg --in-jar ../IncompatiblePlugin/IncompatiblePlugin-01.jar  --out-jar /tmp/sp/out.jar -L

-L enables remapped runtime inheritance, in order to use the obfuscated MCPC+ jar classes
to lookup the inherited classes for remapping. The same mappings are used as for remapping
the plugin (--srg-in and --shade-relocation take effect).

The original option, -l, in contrast does not remap on class lookup, and can be used to
lookup inheritance from a jar with CraftBukkit mappings, for example:

java -cp target/SpecialSource-1.2-SNAPSHOT-shaded.jar:craftbukkit-1.4.7-R0.1.jar net.md_5.specialsource.SpecialSource --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1 --shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle --srg-in ../jars/1.4.7/cb2obf.csrg --in-jar ../IncompatiblePlugin/IncompatiblePlugin-01.jar  --out-jar /tmp/sp/out.jar -l
Add support for non-file jar mapping reading

The input is now a BufferedReader, so you can read from a file with
new BufferedReader(new FileReader(...)), or from an input stream with
new BufferedReader(new InputStreamReader(...)).
Fix explicit ShadeRelocationSimulator constructor
Fix NPE in log() when used in a library
Add classloader inheritance provider

Allows inheritance to be loaded through URLClassLoader, as an alternative
to JarFile/Jar with JarInheritanceProvider. This is how CB loads plugins, and
it may avoid some of the idiosyncrasies in loading the jar directly as a zip -
for example https://github.com/MinecraftPortCentral/MCPC-Plus/issues/51
java.util.zip.ZipException: duplicate entry (CB can load this plugin just fine)

Also allows more convenient remapping in PluginClassLoader, since the
URLClassLoader object is readily available
Add support for loading multiple mappings

New loadMappings() method in JarMapping, can be called to merge two
mapping files. Useful for loading both 1.4.6 and 1.4.7 (relocated).