allow producer class to be overridden in setup_nonblocking_producer

I need to override some methods on the NonBlockingTaskProducer with some custom functionality, so have changed the `setup_nonblocking_producer` function to optionally take in the class to use when performing its function