Refactor URL formatting code into its own module.

I've been attempting to implement `Show` for Iron's custom URL type, and I want to avoid duplicating all of `rust-url`'s formatting code.

I've made two formatters publicly available in their own module, for URL paths and userinfo (usernames + passwords). This should allow people writing their own extensions to `rust-url` to implement `Show` for their types.

I wasn't quite sure where to put the tests, but they seem quite happy in a little sub-module. I figured the `tests` module was better suited to parsing/library tests.

Related: https://github.com/iron/iron/issues/130
Not sure about the API here. In many ways a `&str` is neater, but it implies we should switch to `Option<&str>` for the password field, and `&[&str]` for the path field in `PathFormatter`.

The path is what worries me, the shortest expression I have to convert a `Vec<String>` to a `&[&str]` is this...

```rust
path.iter().map(|s| s.as_slice()).collect::<Vec<&str>>().as_slice()
```

I expected this to fail the borrow-checker, but it doesn't. Makes me wonder if some sort of `map_slice()` method would be useful on vectors, as I imagine this is a common pattern.