Fix error handling & refactor to be fully asynchronous

Quite the rewrite, but refactors to eliminate the weird queueing system internally.
Was there a necessity to pull this code into parseStream? Or what is the benefit of doing so?