Convert producer to process. Allow timed producer culling.

This moves the producer into a subprocess, allowing the parent process to simply monitor and keep it alive. This is related to #186 where parent processes were seen ballooning memory, which in turn resulted in bloated child processes when consumer processes were re-created (ballooning memory due in part to issues around frequent consumer restarts #197). An addition a `refresh_worker_process` configuration value allows providing an optional integer value representing the number of seconds the worker process should run before it is cleaned and re-spawned. Would love to get some feedback and will update the README + rebase if everything looks good. Thanks!