(feat) Add a URL wrapper type.

Closes #130.

I went against URL convention slightly by making the username optional. I did this for consistency with the password field, and because I think the `Option<String>` approach is more in the spirit of Rust. Usage should still be quite smooth.

One strange implementation detail: I had to call the module something other than `url` in order to avoid name clashes with the `url` crate. Alternatively, we could rename the `url` crate.

```rust
extern crate url_crate = "url";
```

TODO:

* Implement `Show`. This would be nice, but would require a bit of formatting code and duplication of `rust-url` functionality.