Using modern Java APIs

Hashtable is too old and its prefered to use HashMap instead Hashtable. Has
no reason to use Hashtable here. And GsonDeserializer can use Charset
instead of String charset name, that is preferable in Java 6+.
Adding serialization and equals/hashcode to comparators.

According JLS all comparators should implements Serializable and
overriding equals and hashcode methods.
Using Arrays.toString to print values instead of object reference
SortByArgumentsLengthDesc should be a static inner class and Serializable
Closing streams to avoid Eclipse warnings
I18nParam must be Serializable

Because I18nParam class is stored in a serializable class, so must be
serializable too.
Merge pull request #889 from caelum/ot-usingmodernapis

Refactoring internal API to use modern Java APIs