resolves #79 extension API for document processing

- preprocessors filter lines before parsing
- treeprocessors run on document after parsing
- postprocessors run on rendered output
- block processors handle blocks with custom names (i.e., styles)
- block macro processors handle custom block macros
- inline macro processors handle custom inline macros
- also introduces some optimizations and parsing cleanups