Resolve build issues on Oracle JDK8

Mostly pretty sane, caused by the change to hash functions which changes order in output sometimes.

The last change (for contact info setting) looks to be the right fix, but I'm still not sure why the invoke behaviour changed between JDK7 and JDK8, or why the original code tried to set the old contact information back over the new contact information only to have it overwritten in the save() call.
I wanted ordered behaviour for the format options, of which there will always be only a few. If there is concern about potential impact on other users, one alternative would be to create an OrderedCaseInsensitiveMap class and use that for the format options, and use the existing CaseInsensitiveMap (backed by HashMap) for all other users. That said, there aren't many, and they're either test classes, or format / header lists. So I don't think its likely to be a big impact.