Polish Headers. Improve handling of null values

Headers now uses a TreeMap to store the Headers, ordered with
String's CASE_INSENSITIVE_ORDER comparater to provide case-insensitive
matching of header names. This addresses the problem of calling
toLowerCase on potentially null header names and also provides robust
case-insenstive comparison. Fixes #119.

The handling of null values has been clarified. Setting a header's
value to null will remove it. When working with a Map, either in
setAll or during construction, the same rule applies. Fixes #120

The behaviour of the Iterator has been made consistent. It now
iterates over an unmodifiable copy of the headers. The Iterator now
returns Tuple<String, String> for each header rather than
Map.Entry<String, String> so that the use of a map can be an
implementation detail. Fixes #118