thread-safe Gearman client

A consumer of the a Gearman client ideally would have no way to modify the sate of a Job, and would like an interface like this:

```go
type Job interface {
	Handle() string
	// Still TBD on the way to access Data/Warnings
	Data() <- chan []byte
	Warnings() <- chan []byte
	Status() Status
	// There could maybe be instead a channel that sends the finished state down the channel when the job completes
	State() StateType
}
```

But the Gearman client needs to be able to modify the data/warnings and the status, somehow. It could be something like providing two different interfaces, one with ways to mutate and one without, where `job.New` returned something with setters but `client.Submit` does not.

That seems less clean to me, though, than just moving some of these submodules into the top-level.