Lexes a flat list of lexemes into block-level tokens.
This is the main entry point for the block lexer. It processes lines sequentially, tracking state for multi-line constructs (fenced code blocks, HTML blocks).