Add support for special characters in git paths

Paths containing special characters are printed as C-style quoted string
literals by git.  These strings require translation before interpreting
them as paths, but this can't easily be done within the grammar due to
Regexp::Grammars being active within the scope and the effects it has on
regular expression evaluation.  Restructuring the match processing code
allows this to be done generally, simplifying the translation code
needed for compound types (e.g. paths with different string types).

Each referenceable token now has an associated type which is used to
determine the type of translation that is performed in the evaluation
phase.  No evaluation is performed if a match doesn't have a type, and
evaluating a match type without an associated evaluation function
returns the matched string unmodified.

use Regexp::Grammars is also removed from global scope to avoid changing
regexp behavior globally.
Clean up reference creation

ref_str() and %seen_refs are now add_ref() and %ref_ids respectively to
more accurately reflect their usage.
Clean up reference extraction and formatting

%results is now %matches for consistency with Regexp::Grammars, and the
array of extracted reference information is now @refs instead of
@matches.  Variables containing reference identifiers are renamed from
$ref to $ref_id to reflect their actual contents.  push_ref_matches() is
renamed to push_match_refs() to reflect these changes.

Some formatting errors (identifier case, spaces) are also fixed.
Fix git status handling

Status lines for tracked and untracked files are handled differently to
avoid ambiguity with paths containing label strings (such as 'deleted:'
or 'modified:').  Support is removed for referencing renamed files,
since paths containing the character sequence ' -> ' are ambiguous.