Bug fix for gi behaviour

Bug description

Steps to reproduce

1. Open a file
2. Switch to insert mode
3. Insert any characters
4. Switch back to normal mode
5. Press gg (or move cursor to another position by any other means)
6. Press gi

Expected result:
Switch to insert mode with cursor after the last inserted character

Actual result:
Switch to insert mode with cursor before the first non space character in the line
Moved SearchHelperTest into a separate test directory
Base class for action tests
VIM-276 T and F motions are exclusive, not inclusive
Nullable annotations
Moved toKeyStrokes() to VimTestCase
VIM-198 Fixed indexing bug in offset normalization

Normalization was fixed for files that contain a newline at the end and when the normalized offset is allowed to be at the end of a line.
Cleanup and nullable annotations
Register action for 'iW' selection
di" ci" vi" da" ca" va" like in vim
VIM-146 Fixed handling of '$' in search and substitute commands

'$' matches an empty range at the end of a line, so in multiple matches mode the search continued forever.
VIM-226 Added tests for the bug fixed together with VIM-146
Cleanup and annotations
Enum key handler state instead of integer constants
More motion tests
Immutable isRecording inside handleKey()
Reuse StringHelper.stringToKeys()
Pull typeTextInFile() up to VimTestCase
Macro recording test
Extracted several methods from KeyHandler.handleKey()