Java Producer Provider

First pass at adding java producer functionality.  

A lot still needs to be cleaned up
The actually implementation of `#push_single` between the different providers can be different in my opinion providded the `Producer#push` signature and behavior remains consistent