Initial sketching out of the new path module

Define the basic types, and the GenericPath trait.

This module is currently called path2. It will be renamed later.
path2: Implement PosixPath
path2: Start reimplementing in terms of ~[u8] instead of ~str

As documented in #7225, we cannot rely on paths being representable in
utf-8. Specifically, Linux allows anything (besides NUL) in a path.
Redesign GenericPath in light of this.

PosixPath hasn't been reimplemented yet for ~[u8].
path2: Reimplement PosixPath in terms of ~[u8]
path2: Update all the tests for the new [u8]-based approach
path2: Add tests for the [u8]-based methods
path2: Extract posix/windows into their own files

Move PosixPath into posix::Path.
path2: Add more tests to posix impl
Merge branch 'master' into path-rewrite
path2: Implement WindowsPath
path2: Rename Path::new() to Path::from_vec()
path2: Add opt variants for from_vec/from_str
path2: Implement .as_display_str() and .to_display_str()

These functions are for working with a string representation of the path
even if it's not UTF-8 encoded. They replace invalid UTF-8 sequences
with the replacement char.
path2: Implement IterBytes for Path
path2: Implement stat support
path2: Rename pop_opt() to pop() and add each_parent()
Merge branch 'master' into path-rewrite
path2: Convert typedefs to `pub use`s

Turns out you can't call static methods on typedefs. Use `pub use`
instead to work around this issue.
path2: Replace the path module outright

Remove the old path.
Rename path2 to path.
Update all clients for the new path.

Also make some miscellaneous changes to the Path APIs to help the
adoption process.
path2: Fix some linux/windows issues