Implement OpMergeParagraph 

Depends on pr #599 and #600.

In order to improve the OT-ability of text and paragraph removal with other operations, the merge behaviour has been extracted.

The logic for building up the necessary remove operations has been encapsulated in TextController for now as all uses pass through this point still.

Some important concepts in this patch:

* Paragraphs are effectively identified by their start position. This means that all paragraph-related operations (SetParagraphStyle, SplitParagraph) will need to also specify the start position of the paragraph being impacted as well in order to allow OT.
* Text remove operations are expected to be constrained to within a single paragraph (though it can include inline roots within the paragraph such as annotations).
Is it necessary to pass around the collapsing rules function like this? From what I see this function is the only place that uses it, so it should be created here.

If it requires `odtDocument`, well... why not save it in a variable in the operation class upon execute? That would remove the need to pass it to so many functions.