fix for Windows file timestamp timezone madness

On Windows, changing the time zone causes the apparent mtime of files to
change. This confuses git-annex, which natually thinks this means the files
have actually been modified (since THAT'S WHAT A MTIME IS FOR, BILL <sheesh>).

Work around this stupidity, by using the inode sentinal file to detect if
the timezone has changed, and calculate a TSDelta, which will be applied
when generating InodeCaches.

This should add no overhead at all on unix. Indeed, I sped up a few
things slightly in the refactoring.

Seems to basically work! But it has a big known problem:
If the timezone changes while the assistant (or a long-running command)
runs, it won't notice, since it only checks the inode cache once, and
so will use the old delta for all new inode caches it generates for new
files it's added. Which will result in them seeming changed the next time
it runs.

This commit was sponsored by Vincent Demeester.
finish fixing windows timezone madness

Rather than calculating the TSDelta once, and caching it, this now
reads the inode sential file's InodeCache file once, and then each time a
new InodeCache is generated, looks at the sentinal file to get the current
delta.

This way, if the time zone changes while git-annex is running, it will
adapt.

This adds some inneffiency, but only on Windows, and only 1 stat per new
file added. The worst innefficiency is that `git annex status` and
`git annex sync` will now (on Windows) stat the inode sentinal file once per
file in the repo.

It would be more efficient to use getCurrentTimeZone, rather than needing
to stat the sentinal file. This should be easy to do, once the time
package gets my bugfix patch.

This commit was sponsored by Jürgen Lüters.
unset TZ on Windows

TZ gets set when opening a cygwin terminal.

What I'm oberving is strange.. when TZ is set, even if it's set to the same
thing as the system time zone, it seems to result in files showing with
different mtimes than when TZ is not set. When TZ is not set, the system
time zone is used.

Anyway, once getCurrentTimeZone is fixed, I'll want to have TZ not set so
changes to the system time zone are available immediately.
unset TZ on Windows

TZ gets set when opening a cygwin terminal.

What I'm oberving is strange.. when TZ is set, even if it's set to the same
thing as the system time zone, it seems to result in files showing with
different mtimes than when TZ is not set.

Having TZ set also prevents seeing the real system timezone, so let's kill
it.
this just went from horrible to insanely weird
merge in windows loststamp branch
changelog update
Merge branch 'master' of ssh://git-annex.branchable.com
Added a comment
update; highlight need to commit and mention git-annex copy
Merge branch 'master' of ssh://git-annex.branchable.com
fix a test suite reversion on Windows

Forgot to pass gitEnv when running commands in the git queue on windows.
update
work around a bug in git

http://marc.info/?l=git&m=140262402204212&w=2

This git bug manifested on FAT and Windows as the test suite failing in 3
places. All involved merge conflict resolution. It turned out that the
associated file mappings were getting messed up, and that happened because
this git bug lost track of what files were supposed to be symlinks.

This commit was sponsored by Eric Kidd.
devblog