Better fenced code block matching

Fenced code blocks can use either ``` or ~~~ as a delimiter, and can
include more than 3 backticks/tildes in a row if they want (~~~~). It
also appears that the start and end markers don't have to match.

This was verified in both the redcloth Markdown implementation and
GitHub-Flavored Markdown.