thread-safe Gearman client

It's not only the `State` setter/getter, but also exposing these channels lets a user of a `Job` read/write/close the channels. I think there's a valid interface/submodule to be had here if it's thought of in terms of the user of the library as a whole and what they want after submitting a job.

I think of job data and job warnings as being analogous to stdout and stderr of a process--yes you can make distinct writes to these, but that's an implementation detail that the client shouldn't really rely upon. My opinion aside--if `Job` wrote all data/warnings to internal `byte.Buffer` objects and exposed them as `io.Reader`, you could still copy these to something that treated individual `Write`s as distinct events.