implement case insensitive headers

for the request() method that takes headers, use TreeMap with toLowerCase Ordering. The resulting behavior is that:

getHeader("ACCEPT") and getHeader("Accept") should return the same value