thread-safe Gearman client

This is probably at the point where we should take it offline, since there's lots of unrelated discussions happening here, but imagine a worker that looked like this:

```go

func GearmanWorker() {
  for el in array {
    // JSON stringify el and send as worker data
  }
}
```

That's a totally valid thing to do when the client is getting every chunk you send it as a chunk, but when all the chunks are getting combined and the client just gets a stream of bytes, it can no longer distinguish one object from another without additional parsing. Further, the parsing is just *undoing* the work that your client library did to convert the chunks into a stream.

I think we can provide configurable locations for data without changing how that data is handled - for instance, the caller of `Submit` could pass in a channel to send data to (or something else that's not a channel), instead of having one created and returned as part of the `Job`.