Organize code in Asciidoctor module; optimize block matching

- put all code inside an Asciidoctor module block
- moved debug operations into Debug submodule
- optimized block matching by using a single regexp
- added support for fenced code blocks (issue #118)

I anticipate this pull request will cause a (potentially tricky) merge conflict after the ones submitted in the last day are merged. Just let me know when you get those done and I'll rebase this one.