Use markdown + html parsers to detect codeblocks
Use markdown + html parsers to detect codeblocks

Fixes #37, #38, #84, #88, #99.

This commit builds upon the markdown-to-ast integration we added in #91,
using markdown-to-ast in `lib/get-html-headers.js`.

We first filter our lines to only look for HTML sections (using the
markdown parser), then in these HTML-only sections, we search for
headers, as long as they're not inside pre tags.

This is accomplished by keeping a stack of tags we've descended through.
We can peek at the top of the stack to see if we're directly under a
`pre` tag, meaning we should ignore everything until we see the closing
`pre`. Otherwise, we can collect text from inside heading tags as
normal.

Thus, the core changes in this commit are:

- `grabbing` is a stack now, instead of a string
- `markdown-to-ast` lets us filter for only HTML blocks
- `htmlparser2` lets us check if we're inside a heading *or* pre tag

thlorenz/doctoc,karfau/doctoc,jez/doctoc