Avoid NPE with transport message headers

A small change just to make transport messages headers safer. `getHeaders()` now returns and immutable map and all header modifications should be done directly on the request via `putHeader`