Various general improvements

Made the following improvements:
- Replaced backspace/delete code using DTE with code that directly
modifies the text buffer. Backspacing/deleting tabs now occurs in a
single step, so it takes a single Ctrl+Z to undo. (Replacing virtual
spaces with real ones causes some backspace operations to take two
undos. This could probably be improved.)
- Backspace/delete no longer treat whitespace in the middle of code as
tabs.
- Backspace/delete and arrow keys no longer treat trailing whitespace as
tabs.
Merge pull request #6 from ChaosinaCan/master

Various general improvements