Cleanup leading/trailing insignificant whitespace on paragraph merge

Failing to clean up these empty whitespace blocks will cause them to
unexpectedly become significant whitespace after a merge is performed.
Implement OT support for MergeParagraph
Slight performance improvement for StepIterator.roundToClosestStep

Fetching the offset for a position can be prohibitively slow in some
cases. Avoid storing this value until absolutely necessary.
Avoid unnecessary cache hits to improve performance of OpMergeParagraph

Check paragraphs are adjacent by moving one step back from the source
paragraph.

Downgrading using a pre-populated StepIterator avoids another cache hit.