use a limited number of workers instead of large buffered chans
create ParserContext structure to communicate all along the pipe
added minimal error handling