Second attempt at Bug 5747 change: Deal with possible ending "/" this time.

My first fix for Bug 5747 was reverted because it broke something with
file system monitoring in XSP.

This is a revision of that same patch, but this time i take into account
the possibility that the fsw.FullPath value could possibly end with "/".
The previous version of this commit, no longer in place, didn't factor
that in and as a result if the fullpath ended in "/" we would cut the first
character off filename by virtue of the "Length + 1" substring.

The purpose of this patch was to fix the following problem:
files/directories modified in subdirectories were coming back with
just the file NAME and not subdirectory path.  This patch modifies
the filename so if you get an alert on a file in a subdirectory 'mysubdir/file1'
you would get 'mysubdir/file1' rather than just 'file1', for whatever
direcotry (fullpath) you are watching..

Please note, i tried but i can't get XSP from git to use my local development
version of mono -- as a result i couldn't test against XSP.  Instead, i tested
against the bug report source sample both with and without a trailing '/'
separator.  Prior to this revised version, if full pathname ended in a trailing
'/', and you modified 'file1' you would get back 'ile1' a as the filename if
the prior patch was applied.

Someone may want to test against xsp before accepting this revised submission
In KeventWatcher ProcessEvent we were passing null for changedFsi, incorrectly

We had a fsi value for changedFsi, but we were passnig null for it when
calling PostEvent.  This patch corrects that.
Whitespace fixes
Implemented all of DiscretionaryAcl except for RemoveAccess. Unit tests are included.

Also fixed:
CommonAcl's merging now filters out AceFlags.InheritedFlags when !IsContainer.
For matching AccessMask, CommonAcl will now correctly merge ContainerInherit and ObjectInherit.
GenericAcl's SyncRoot is now virtual as per spec.
SecurityIdentifier.CompareTo throws ArgumentNullException, not NullReferenceException, on null parameter.

Miscellaneous unit tests:
Verify that RawAcl throws for negative capacity.
Fixes a number of warnings in System.Web.dll
Implemented SystemAcl. Common shared functionality moved to CommonAcl. Only missing implementation now is RemoveAccess/RemoveAudit.

Unit tests included - for SystemAcl they are based on DiscretionaryAcl's mostly,
with one extra and one somewhat changed since AuditFlags merge together unlike Allow/Deny.

Anyway, it should be practical to implement CommonSecurityDescriptor and friends with these classes working.
Fixes a number of warnings in System.Windows.Forms.dll
Merge pull request #372 from JamesB7/system-security5

Implemented DiscretionaryAcl and SystemAcl except for RemoveAccess
Improved error messages so that it becomes clear where configuration errors come from
Merge pull request #375 from atomia/master

Improved exception messages in case of configuration errors
Not validating if null value is null

This allows parsing of enterprise library config extensions and is in line with the way MS .net handles things.
Merge pull request #376 from atomia/master

Allow parsing of config files for for enterprise library.
Applied Marek's suggestions so remove CS0067 from certain event handler declarations
[Microsoft.Build.Tasks] Fix some simple caching to improve build times

Large projects now have significantly less overhead when calculating
assembly references and referencing gac assemblies.
[Microsoft.Build.Tasks] Remove an overly verbose informational message

This warning really pollutes the monodevelop build, so lets nuke it
for now.
Merge pull request #373 from QuickJack/master

Removed a number of warnings
Fix an assert in the arm backend if an offset is too large.
Fix Order property to throw on no value
Fix failing dns tests
Rework RectangleF.Contains to not do equality comparison on floating point values. Fixes #5985.