Save/restore unstaged changes before running hooks

Add support for "hiding" unstaged changes to files before running the
hooks against them. This prevents the situation where unstaged changes
would cause hooks to fail, but they shouldn't because they are
unchanged.

Previously, Overcommit accomplished this by copying staged changes to
temporary files and then running checks against those files. The problem
with this approach is that it breaks the functionality of tools which
perform certain checks based on filename/path. Since the temporary file
will not share the original path, the tool doesn't work as expected.

By stashing changes to the file instead, the path/filename remains the
same, but we still get the benefit of hiding the unstaged changes.

Change-Id: Id1d39d47be4be7348c4126a6d6793506605e8149
Reviewed-on: http://gerrit.causes.com/35603
Reviewed-by: Shane da Silva <shane@causes.com>
Tested-by: Shane da Silva <shane@causes.com>