Refactored saving text to register to prevent register loss

Fixed issue #321.

To fix, I refactored the way we store deleted items in the register. The Operator class now has a method which saves text to the register.

This allows us to specify which operations should store text to the register, and which shouldn't. The old way (which relied on `buffer.on('change')` was erroneously adding many items to the register that we didn't want.

As for tests, existing tests should be sufficient, since I did not add new functionality but changed the way it worked. All current tests still pass, so we should be good.

Operations that now add stuff to the register:
- Yank
- Delete
- Substitute
- SubstituteLine

Let me know if others should also add to the register.
Thanks, fixed that.