The benefit of initiallize is now becoming clearer. Additionally, the
presence of a few additional formatter instances should not be too
significant, especially considering that these are tied to classes.
Rename PrimitiveType to BaseType, since String is not primitive
* Unprintable chars are now formatted as \u00?? instead of 0x??
* Type instances now can do formats and hashCodes on their values
Better support for formatting arrays:
* Formatters now have separate method for formatting objects which might
  be arrays and those that should not be considered as arrays.
* We no longer rely on the formatting methods in Arrays, since those
  create their own StringBuilders. Additionally, this allows us to
  handle char arrays nested inside other arrays in the same way we
  handle simple char arrays.