Refactored plugin (by Otto Modinos).

Squashed commit of the following:

commit 92394061cf21b25613a1c970787416098b855f26
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:30:41 2014 +0300

    add new option g:indexed_search_mappings

    If 0 it does not map ?/nN*#.  If 1 or undefined, it maps them.  Could be
    useful if you only want to use :ShowSearchIndex

commit 88f3eddc660cd8a18cc5e913849238b81f45152b
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:17:51 2014 +0300

    cosmetics

commit 47eea3e80d731572f68608117eeadb87fc041877
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:12:37 2014 +0300

    remove irrelevant comment

commit d8fc77074389bc04903f4e6caca1ba13481ab446
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:11:24 2014 +0300

    don't load on vim less that 7 or if compatible

commit f6fb4192f1b7f8417545a203951685397ebdbdb5
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:10:31 2014 +0300

    fixes

commit 5386f7c97d10855527ff1794e3fabaec2851f76c
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:07:37 2014 +0300

    remove ShowCurrentSearchIndex, use schedule_echo

    Also, rename it and use it for :ShowSearchIndex

commit 5feb2dd9a247d127e8f639187a8d6487106b6ae6
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:05:43 2014 +0300

    remove the show index keymaps

    If someone wants the, there's :ShowSearchIndex

commit 893b4c01befa7366ab7b19b0ebdacc57bb8875b1
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:03:31 2014 +0300

    implement all keymaps using :ShowSearchIndex

commit acf38d04be4264a98bea9fa0fe3e2d8569713128
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 04:01:06 2014 +0300

    add banged variant of ShowSearchIndex

    It overrides any line or match limits and always shows the current
    index.

commit 206137de44266e036598a17b54371d12d8ee0c84
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:58:05 2014 +0300

    remove g:indexed_search_keep_cursor_on_initial_result

    It does not belong in this plugin.  If someone want's that
    functionality, it's as easy as
        nmap * *N

commit 2dd76fed244aa04015bf4a2e149bd98ddce8ac30
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:45:53 2014 +0300

    fixes

commit ecc65bf81f13cc8df805860b13c8f5434aec6d6a
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:44:13 2014 +0300

    fix force in s:schedule_echo

    autocmds can only see script and global variables, not function
    arguments.  We therefore use a script variable, s:force.

commit e745c3c0178b15c5045b666b1282a4095c3cc4ba
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:40:13 2014 +0300

    make s:current_index return [hl, msg]

commit 7a1a551ecc65cf81fc3d9cc22da9b7464967a962
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:38:02 2014 +0300

    refactor s:schedule_echo

commit 3d50dbb3c4056d40fb93373afae697c986722510
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:31:21 2014 +0300

    remove s:DelaySearchIndex

    Always use s:Msg and s:Highlight that's computed in the same autocmd.
    This breaks g:indexed_search_colors and force but that'll be fixed.

commit 01fa52030263a5b67c30cab8b28ff9fb54801270
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:12:54 2014 +0300

    fixes

commit f24aa0878e81a0a6c55136ddc4f647676721ba82
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:06:50 2014 +0300

    rename s:ScheduleEcho and move it

commit e02dc2e257269ffa243a29f5107ba14b4030d6f8
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 03:04:01 2014 +0300

    rewrite the autocmd a bit

commit 4fa1def35d17ff96834e87f571ca6e0e8338699b
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:58:48 2014 +0300

    extract some functions from s:ScheduleEcho

    s:colored_echo and s:destroy_augroup

commit e5ae26503b598ec398849824d9af6dd15998fb1c
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:55:01 2014 +0300

    rename s:ShowCurrentSearchIndex to s:current_index

commit c508a90f315a2f8b2bc4ef1334835bef4c5e3c1f
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:49:17 2014 +0300

    remove the cmd stuff from s:ShowCurrentSearchIndex

    It didn't have much reason to exist anymore.  It was probably a remnant
    of an older design.  The only path that was ever taken was the one where
    cmd == '!'.  In that case it print vim's error message if there was one
    but it changed the highlight group and it was only displayed briefly.  I
    could add that path back if someone wants it.
    I didn't remove the function argument yet.

commit ee20fb53e8e6fc9234436e5d3987b580688320bb
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:33:49 2014 +0300

    rewrite s:index_message

    It makes more use of g:indexed_search_shortmess (it was used only in one
    place before).  It also returns a value regardless of v:errmsg. If this
    is undesired, it can be easily fixed.  It also returns [hl, msg] instead
    of setting script variables.  s:ShowCurrentSearchIndex does that now
    thought that will dealt with too.

commit 9e4a93f2fb22043e32462fc8debaf7edbb3bfc50
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:27:53 2014 +0300

    extract s:index_message from s:ShowCurrentSearchIndex

commit 7493bc01f4782e4e9972addb225127f0fcd4aa00
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:21:34 2014 +0300

    rewrite s:search

    It now uses searchpos() to do the searching.  It also always uses
    winsaveview() to save the cursor position as well as get the line and
    column.  This is a vim7 function, but the autoload directory is vim7
    too.

commit 8d14e71016fa6a5d372d4cb5d551134eaabf4cac
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:18:04 2014 +0300

    extract s:search from s:ShowCurrentSearchIndex

commit 80eb2b2027ef53cb01358cd23010a11bf34546a6
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:11:57 2014 +0300

    use function everywhere instead of func

commit b4fc0bfa6258aff5bc64f191ba6ca467607704b6
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:10:29 2014 +0300

    rewrite MilliSince

    It's actually not used anywhere though

commit 567420a0f5d85136d3579ef3906cbd07c12010e3
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:06:36 2014 +0300

    move functions to autoload

commit f70616cbcc9edd2ee008e92d68d95f9eb0e4bc98
Author: Otto Modinos <ottomodinos@gmail.com>
Date:   Wed Sep 24 02:02:23 2014 +0300

    move comments and variables around
add back g:indexed_search_keep_cursor_on_initial_result

Unfortunately, unlike what 206137d proposed, just a
    `nmap * *N`
in your `.vimrc` won't work because plugins are sourced after it and they
would overwrite any mappings you had.

Add back this option which makes the cursor stay on the word you *.
It's renamed to `g:indexed_search_dont_move` though.
Simplify the mappings

Hope it doesn't break anything!
Change some comments
Add option g:indexed_search_unfold

Like `g:indexed_search_dont_move`, it's there to overcome the fact that
a normal mapping, like `nmap n nzx`, won't work with the plugin.  Like
it says, it opens just enough folds so that you can see your search
result, while keeping every other fold, opened or not, intact.