Redmine #4716: Lots of fixes to dirname(), esp. on Windows.

These problems were fixed:
* AddSlash() always adds Unix slash when argument is empty.
* DeleteSlash() removes root slash.
* FirstFileSeparator() returns NULL on all relative Unix paths, even
  if it has a file separator.
* ChopLastNode() gives empty string when removing last directory
  component of a relative path. It should give '.'.
* ChopLastNode() does not handle Windows drive letters.
* IsAbsoluteFileName() does not handle absolute paths on Windows that
  don't start with a drive letter. Both types are considered absolute
  paths.

This also fixes a Windows issue where creating a directory in policy
would lead to an error message about not being able to chdir into a
directory with the name ''. This was due to the final root slash not
being preserved.
How about some repeat-separator tests ?
```
/////////////foo////////////////// -> /
//////foo//bar//baz////ow//// -> //////foo//bar//baz (or possibly /foo/bar/baz/)
```
and same for each without its separators after the last path component (i.e. file not dir).

What is your intended answer for `/foo/.` ?  Should it be `/` as for `/foo` (of which it is an alias) or should it be `/foo` (because we just stripped the final `/.`) ?  I'm guessing the latter; either way, there should be a test for it.