Many improvements over first generation libraries

Please take a look at it and lets see if we can stop diverging. This new library supports streaming and should be Erlang scheduler friendly unlike the old versions which could sit there and block the VM for a while.