Fix the toml-rs build location
Move from all-URL to Path/URL enum

On windows a path cannot be represented as a file:// URL because of the
backslashes and colons in the file name. This causes all of the tests which rely
on git to fail on windows. This commit changes the representation of the
location of a package to be an enum, Location, with two variants: Remote and
Local.

When parsing Cargo.toml, all locations which begin with the string "file:" have
that prefix stripped and are then interpreted as Local packages. Everything else
is parsed as a URL and used as a Remote package.
Disable terminal tests on windows

The windows terminal does not use terminfo and is much different, so these tests
will fail on windows or actually write to the console.
Fix rm_rf on windows

Apparently git checkouts have objects in the database with permissions 444 which
need to be changed to something with a write permission before removal.
Switch the process builder to starting from ToCStr

This is the same as the libstd Command builder, and will soon be used in the
tests for spawning processes on windows.
Fix lots of windows tests

* Add a convenience method bin() for generating the name of a binary. On windows
  this remembers to append `.exe`.

* Stop executing relative paths to binaries and relying on PATH. This is
  suffering from rust-lang/rust#15149 and failing to spawn processes on windows.
  Additionally, this allows the tests to work with a pre-installed cargo becuase
  the freshly built executables are precisely specified.

* A new function, escape_path(), was added for tests. When generated source
  files with paths, this function needs to be called to properly escape the
  \-character that appears in windows path names. Without this function we would
  be generating invalid TOML and rust.
Ignore \r in output matching

Windows occasionally has \r\n while everywhere else has \n. Instead of worrying
about the difference, just replace all instances of \r with nothing and rely on
matching against \n.