[FilePath] Add support for manipulating symlinks on Unix platforms

This is required if we want to be able to properly support symlinks
on macos/linux.
If a valid eclipse installation cannot be found when runnign 'which eclipse'
then make a guess that we're on macos and that it exists in /Applications. If
that fails, then bail out.
Update java.patch, cs.patch and lastrev to the latest version of ngit
Add some helpers to Sharpen which are required for new ngit
Import the latest ngit source to the tree along with the new unit tests
Do not fail and bail out if the patching process does not go cleanly

If java.patch has to be modified then this patch may nto apply cleanly.
When this happens we should just ignore the problem and leave the person
updating to solve any conflicts and make the necessary modifications for
ngit to compile again.
Merge pull request #18 from alanmcgovern/latest_jgit

Latest jgit
Work around a crasher on windows when the path is invalid.

There is a slim possibility that the PATH environment variable will not
contain a valid path. In this scenario, an unhandled exception would get
thrown in the static constructor which would render the library unusable.

Add this workaround while the root cause is tracked down.
[Sharpen] Optimise the handling of symlinks on windows

Use a try/catch for EntryPointNotFound exception so that Sharpen does
not use UnixFileInfo on windows. Fixes some perf issues on windows.
Merge pull request #21 from alanmcgovern/optimise_symlinks

[Sharpen] Optimise the handling of symlinks on windows
Merge pull request #19 from alanmcgovern/master

Handle invalid paths in the 'PATH" env var
[NGit] Fix a bug in the calculation of 'ismodified'

autocrlf 'input' means the file is *not* modified on checkout so we
should not do an crlf/lf conversion when calculating the hash for the
file.

Fixes bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=372834
Merge pull request #24 from alanmcgovern/autocrlf_fix

[NGit] Fix a bug in the calculation of 'ismodified' in WorkingTreeIterator
[Jsch] Bump to a newer version

We need this to support more types of encrypted private keys, such as
AES encrypted ones.
[Jsch] Update to the latest JSch release

This will provide some of the work we need to support AES encrypted
SSH keys.
Merge pull request #25 from alanmcgovern/update_jsch

Update jsch
[JSch] Disable DHG14 as it is too slow

Also clean up cs.patch a little by removing some of the unnecessary changes.
Merge pull request #27 from alanmcgovern/update_jsch

[JSch] Disable DHG14 as it is too slow
[NSch] Allow ssh keys with public exponents which are not 35

We had hard coded '35' as the public exponent which made things fail
for every private key which did not use 35 as the public exponent.
I do not know how this is supposed to be handled, but this is the
only way I can sanely supply the public exponent when signing data.
This fixes https://bugzilla.xamarin.com/show_bug.cgi?id=356.

If there is a better way to fix this, I'm all ears. As it is i 'fixed'
it by modifying our declarations of the java interfaces in order to
pass in the required parameter which just seems wrong.
Merge pull request #28 from alanmcgovern/ssh_key_fix

[NSch] Allow ssh keys with public exponents which are not 35