Update handling of headers

* Keep headers as [key => value]
* When setting headers in cURL, map headers to correct format, adding
Content-Length
* Do this without modifying original headers or adding Content-Length
Use list() & array_pad() instead of switch for __call()

Was using switch because number of paramaters in $arguments was unknown.
Use list() & array_pad() to solve this problem and reduce repetition by
only having one set of arguments to work with.