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