Minimised the potential for a map conversion by retaining the data field and performing sequential searches on it. Given a typical number of headers (~10) this may be better than a hash map + the cost of coercing to a map in the first place. Its also roughly inline with how Netty deals headers.

Performance measurements gathered show no significant performance benefit although there appears to be a slight improvement. In many cases the map should not have to be created and memory usage should also therefore be slightly better.

New suite of unit tests for Http - mostly covering the internal changes made.

Clarified the contract of the "data" member of Http.Headers such that multiple headers with the same name are not expected within the structure. This wasn't a problem previously as Fakes leverage the internal assumption that "data" would be transformed to a map and that duplicates would therefore be eliminated. The Fakes code has been updated to conform to Header's contract.