Full search implementation (work in progress)

I've taken some time to extend the XVim search command to support more Vim capabilities. This is a work in progress and I would like to get some feedback.

**New Features**

- Templates in replacement text, `:s/do(.+)Now/do$1Later/`. Note that it currently uses the `NSRegularExpression` format `$1`, `$2`, ...
- Replace all occurrences in the line, `:s/../../g`. Without `g`, replacement occurs only for the first occurrence in each line.
- Implementation is very close to the actual Vim method and handles multiline replacements and line count changes. This fixes some looping conditions and works overall very similar to Vim now.

**To-Do**

- [ ] Prompt `replace with %s (y/n/a/q/l/^E/^Y)?` when confirm flag is set (`:s/.../.../c`)
   - ~~How do we show the message and let the user respond?~~
   - Create internal event loop inside `XVimCommandLine`. Support `CTRL-C` to kill cmds.
- [ ] Set and use `self.isCaseInsensitive`, `self.lastSearchCmd`, etc.
- [ ] Merge the new substitute code with the other search methods
- [ ] Fix infinite loop with `:s/\n/#/`. `:s/\n/#/g` works fine.
- [ ] Add unit tests for normal expressions and edge cases
   - `:s/\xXX//`
   - `:%s/$/;/`
   - `:%s/\n/#/g`
   - `:%s/[a-z] */(&)/g`
- [ ] Handle `\c`, `\C`
- [ ] Handle `:s/../../{offset}`
- [ ] Handle `&` (repeat last substitute)
- [ ] Handle Vim-style replacement templates (`\0 \& \~ \u \U \l \L \e \E`)
- [ ] Add support for `fromCol` and `toCol` instead of only allowing `fromLine` and `toLine`
- [ ] Review text substitution methods
   - ~~The original method to replace text was `[NSTextView insertText:replacementRange:]` but calling it caused position errors on undo. The text `testingSomething` with `:s/testing/xxx/` would say `testingtingSomething`.~~
   - ~~New code is using `[NSTextStorage replaceCharactersInRange:withString:]` which works great. Undo and redo works as long as you call `[NSTextView shouldChangeTextInRange:replacementString:]` before.~~
   - Move string replacement into new `[NSTextView+VimOperation xvim_replaceRange:withString:]`
   - Review undo/redo problems. `xvim_put` seems to work. Maybe instead of replacing in one step, replace and insert in two steps.
- [ ] Refactor `XVimSearchMatch`
   - I've introduced it to track line and col for the match range. Should this be in a different place, maybe `XVimRange` or a new struct instead?
- [ ] Refactor the `arg_next`, .. macros. What's the best way to do this?
   - Combine with macros in XVimExCommand to provide a few standard parsing macros

**References**

- https://github.com/applidium/Vim/blob/3db7e0e75ad8d7f93fa15e24f93b9e26ef335aa5/src/ex_cmds.c#L4222
- https://github.com/applidium/Vim/blob/3db7e0e75ad8d7f93fa15e24f93b9e26ef335aa5/runtime/doc/pattern.txt
- https://github.com/applidium/Vim/blob/3db7e0e75ad8d7f93fa15e24f93b9e26ef335aa5/runtime/doc/change.txt#L555
- http://vim.wikia.com/wiki/Search_and_replace