Improve `^` movement to more closely match Vim

`^` movement was incorrect when already positioned at the first
character, added specs and a fix.
Use buffer positioning.
Merge pull request #155 from zenhob/improved-caret-movement

Improved `^` movement