Bug fix: equalFilePath "C:\\" "C:" == False

This started out as a simple refactoring of `equalFilePath`, and later turned
out to also fix a small bug.

The refactoring is: use `dropTrailingPathSeparator` instead of the custom
function `dropTrailSlash`.

A difference between these two functions is that `dropTrailingPathSeparator`
potentially removes multiple trailing slashes, whereas `dropTrailSlash` only
removes the last one. But since we `normalise` the FilePath first, which
removes superfluous pathSeparators, this difference does not matter to us.

Another difference is that `dropTrailingPathSeparator` does not drop slashes
when the FilePath isDrive, but `dropTrailSlash` does:

dropTrailSlash "C:\\" == "C:"
dropTrailSlash "C:\\\\" == "C:\\"

dropTrailingPathSeparator "C:\\" == "C:\\"
dropTrailingPathSeparator "C:\\\\" == "C:\\\\"

As a result, equalFilePath of drives on Windows changes slightly:

Before:
equalFilePath "C:\\" "C:" == True
equalFilePath "C:\\\\" "C:" == False

After:
equalFilePath "C:\\" "C:" == False
equalFilePath "C:\\\\" "C:" == False

This can be considered a bug fix, since "C:\\foo" and "C:foo", and thus "C:\\"
and "C:", are not the same thing.
#15, increase 100x the number of property tests
Merge branch 'master' of https://github.com/haskell/filepath
Bug fix: isDrive "" == False

isDrive is only called from `dropTrailingPathSeparator` and `combineAlways`.
Both times occur after a check if the argument is not empty (i.e. null for
combineAlways, and hasTrailingPathSeparator for dropTrailingPathSeparator). So
this change is safe.
Bug fix: isValid "\\\\\\foo" == False

Share name can not start with a slash.
Refactor splitDirectories

Use `dropTrailingPathSeparator` instead of the custom function `g` to remove
trailing path separators from FilePath components generated with `splitPath`.

Since `dropTrailingPathSeparator` does not change FilePath components
for which isDrive is True, it is no longer necessary to handle the first
FilePath component in a special way.
Cleanup: rename file to dir in takeDirectory
Remove unnecessary `not . null` check

If `res` and `dir` are both null, it doesn't matter which one we return.
Refactor takeDirectory

Do not reimplement `dropTrailingPathSeparator`.
Allow a broader range of QuickCheck
Make sure :test is actually using the new code
Add a shrink method for QFilePath
Bug fix: normalize "\\" == "\\"
Bug fix: normalise "//server/test" == "\\\\server\\test"

When drive represents a network share, slashes were not being normalised
properly.
Refactor normalise: simplify propSep

Only when a path on Windows starts with a leading forward slash does propSep
need to do something, all others path separators are properly taken care of by
joinPath.

Add 2 tests to show that splitDirectories can handle superfluous
pathSeparators, and a test to show that (this new version of) propSep is
indeed needed to normalise relative-to-root paths on Windows.
Change the .ghci things to run the tests via Cabal - faster
#24, comment out a failing test
#22, comment out a failing test
#16, generalise some equalFilePath tests
#25, comment out another test