[vim] visual_gv reimplementation

This patch tries to improve the existing gv implementation in vim mode with unit tests.

Please review and suggest necessary changes.