VfmdLine: Fix firstNonSpace()
VfmdElementRegistry: Refactor span elements using templates
VfmdElementRegistry: Minor changes to the span elements' handling interface
Optimize black handling using triggerBytes

For blocks, triggerBytes are optional. When specified,
the handler is invoked on a line only when the first non-space byte
of the line matches one of the specified triggerBytes.

This also involves a change to the block handler interface.
Move all blocks to the new block handling interface
VfmdLine: Fix type of m_isBlankLine
Paragraph: Check first for leading 4 spaces
before asking possible next block handlers
Code block: Find the end of the code block in isEndOfBlock()

This simplifies the code and makes it more readable.
It also makes it cleaner to make the code block end at
two consecutive blank lines.
Blockquote: Find the end of the code block in isEndOfBlock()

This simplifies the code and makes it more readable.
Remove null-block handler

The null-block-owned blank lines are handled in VfmdInputLineSequence.
Paragraph: Activate the HTML parser only when we see a '<'
Code block: Optimize for one-line code blocks
VfmdPreprocessor: Better name for the #define on UTF-8
VfmdPreprocessor: Ignore the UTF-8 BOM, if found at the start of the input
VfmdElementRegistry: Fix print()
VfmdElementRegistry: Replacing an existing handler with another
VfmdElementRegistry: remove() should also handle elements without any triggerByte
Lists: Update isBottomPackedListItem() as per the change in the spec
Paragraph: Add a trailing blank line when rendering to HTML
Code span: Trim the content before rendering