Allow job ID to be set on enqueue/enqueue_call() - fixes #412

Fixes #412.

Includes unit tests and is backwards compatible. 

There is a small/minimal risk to enqueue(), for anyone already passing `job_id` as a custom task attribute when calling enqueue(), as it is treated with the same "specialness" as `result_ttl", e.g. it is popped off the `kwargs`.  This is an unlikely edge case, but let me know if you think this is unacceptable.

There is no risk for enqueue_call().
Let's keep this simply and drop the implicit coercion to text. I think we should just document that `enqueue*` methods expect `id` argument to be a string.