Fewer allocs; fix possible race; re-codegen; add Head methods

Quite a few different things going on here:

 - Fewer total allocations per operation (lots of intermediate objects were escaping to the heap in spite of not *actually* escaping, so the only way to save allocations was via `sync.Pool`.)
 - Fix the `proto.ErrWrongType` removal from the `gogoprotobuf` repository. (Maybe Wercker will work now?)
 - `client.Close` doesn't race at all now, although it's possible to close the client before any connections are established.