update: rebased to master and is now using the parser for buffer splitting.
i found that holding onto the parser element and manually driving it is too complicated, it also causes the code paths to diverge significantly between the having-a-parser case and the not-having-a-parser case. so instead i added a proxy element which gives me control over how buffers move through the pipeline.