Implementing buffer as a gap buffer

Integration not nearly finished & no tests done. Will be travelling the next few days, please improve.
Yeah, sorry, made some big changes last night. The HashMap stores any number of points of interest in the file, which could be used for a wide variety of thing (such as supporting text highlighting, multiple cursors, jump points, et cetera); cursor is the key for one of these marks, by default the one identified by "cursor". The keys are strings because I come from Python and it seemed like the easiest option, there may be a better one). The marks themselves are a tuple: the first uint is their actual index, the second is their stored line offset for shifting them up and down. The existence of the second uint is an implementation detail that should be hidden and encapsulated.

Didn't get to the point of figuring out the public methods on buffer. In the committed version the functino call specifies which mark to perform the insert and remove operations at )so the default call would be 'buffer.remove(buffer.cursor)'; not sure that's actually a good idea. And so on.