Support headers in Json response

Also reduced the memory footprint of the Json responses by not including the original Json string and the Json4s object when not required.
If `toMap` is expected to be called often, why not
```scala
toMap.getOrElse(key, Nil)
```