Fixed paths for files excluded from license check

On Windows the paths have backslashes causing any check against the array
of excluded files to fail. To solve this I used the path module to
normalize the file paths in the array of excluded paths for the license
string check.
Merge pull request #633 from satsuper/normalize-path

Fix license header check not passing on Windows
Split CollapsingRules out of OpRemoveText

This functionality will be shared with the soon-to-exist merge paragraph
operation.
Implement OpMergeParagraph

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.
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.
Convert long regex into a switch statement for clarity
Implement OT support for MergeParagraph