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().
Sure that works, my reasoning behind this was to keep in-line with the principle of duck typing, but if you're happy to force `str` then that's fine. I'll update the PR now.