Implementing buffer as a gap buffer

Integration not nearly finished & no tests done. Will be travelling the next few days, please improve.
In Rust string keys aren't usually encouraged, just FYI.  And I'm not sure a HashMap is even necessary at all, since you could just have a structure which contained the relevant data (unless I'm missing something).