Added DirectoryExistsConstraint

This completes the work for issue #111 and all of the planned changes in https://github.com/nunit/dev/wiki/File-Directory-and-Path-Assertions

I added unit tests to show that `Assert.AreEqual()` or `Assert.That(..., Is.EqualTo())` with `DirectoryInfo` arguments works. Unit tests were also added for the `EmptyDirectoryConstraint`.

When I added the `Exists` to the `Assert.That` syntax, I realized that it does not take an expected, so there is no way to specify what the argument type is. Therefore I did not know if I was looking at a file or directory. To handle this, I merged the `DirectoryExistsConstraint` and the `FileExistsConstraint`.

To maintain the behavior of the `FileAssert` class, I added a bool property and constructor to the new `ExistsConstraint` class that forced it to only work with files when called from `FileAssert`.

I also added a new `Does` helper class so that we can say `Assert.That(fileOrDir, Does.Exist)` and `Assert.That(fileOrDir, Does.Not.Exist)`

You can now write asserts like the following

```C#
Assert.That(fileStr, Does.Exist);
Assert.That(dirStr, Does.Exist);
Assert.That(fileStr, Does.Not.Exist);
Assert.That(new FileInfo(fileStr), Does.Exist);
Assert.That(new DirectoryInfo(dirStr), Does.Exist);
Assert.That(new DirectoryInfo(actual), Is.EqualTo(expected));

FileAssert.Exists(fileStr);
FileAssert.Exists(new FileInfo(fileStr));
FileAssert.DoesNotExist(fileStr);
FileAssert.DoesNotExist(new FileInfo(fileStr));

Assert.That(new DirectoryInfo(actual), Is.Empty);
Assert.That(new DirectoryInfo(actual), Is.Not.Empty);
```
Do users (other than us internally) tend to use constraints directly, or just indirectly through the various Is, Has and Does methods? I ended up going with this slightly less clear construct because I assumed that it would be mostly an internal detail and I do not know what type of constraint to return from the Does.Exist since we don't know at the time what the expected is.

This is the code from Does.Exist. Can you think of a way around this? I am happy to also provide a DirectoryExistsConstraint, but like I said, I thought it would largely remain an internal detail.

```C#
        /// <summary>
        /// Returns a constraint that succeeds if the value
        /// is a file or directory and it exists.
        /// </summary>
        public static FileOrDirectoryExistsConstraint Exist
        {
            get { return new FileOrDirectoryExistsConstraint(); }
        }
```