Handle symlinks in versioning (fixes #1071)

This adds some integration tests, running the same thing with the various versioning settings.

Then modifies the versioners to handle symlinks. The first check is easy, the Stat() would fail on broken symlinks and needs to be an Lstat(). The other stuff is to make the staggered versioner a bit more generic, since it assumed that only files and directories exist which is not the truth. You might want to look at that diff with `git diff -w` since there's a big indentation change...
Well on Windows it behaves the same way it as it behaves on Unix, it's just that it has a target type.
If you do `dir` in the windows prompt it will show you the same thing as `ls -la` does on Unix.
An in Explorer it does have this corner icon indicating that it's some black-magic, not sure how it looks like in Properties dialog.

IMHO, symlinks are not critical to loose, as they don't carry data (apart from the path they point to), neither they are required for the sync to succeed (unlike folders are needed to put files inside them).

If we decide to not archive symlinks then we should just do `symlinks.IsSymlink` before we pass stuff down to the versioner.