Use buffer position rather than screen position in h/l movement

In vim-mode, we don’t want h and l to move the cursor to a different
physical line. However, the code that was implementing this behavior
was using screen positions instead of buffer positions, resulting in
incorrect behavior in the presence of folds and soft wraps.

Now h and l can move across soft wraps, and folds above the current line
no longer cause incorrect behavior. This also fixes issues when hard
tabs were present on the line, again caused by using screen positions
instead of buffer positions.

Closes #399
Closes #354