Ordered MapPairs implementation

After feedback from the client developers, the contents
of the MapPairs class which was previously a string-string
map has been converted into a list of string-string pairs.

The `getMap()` method is now `getPairs()` and where possible
mutation of the contents is prevented, e.g. by making the
fields of MapPair immutable and using copy-constructors
rather than setters where possible.

Still slightly unclear is if the naming of the "map" is
correct now that it's no longer based on a hash map, and
whether the value of the MapPair will ever need to be anything
other than a string.

--no-rebase