feat(headers): headers.iter() is more powerful

Previously, iter() returned (&str, HeaderView), which wasn't too useful
other than to write out to a stream. Checking for a certain header is
painful since header names are case-insensitive, but &str isn't. And
once found, you still couldn't do anything with a HeaderView other
format it.

Now, iter() returns a HeaderView, with methods is(), name(), and
value(). You can do `view.is::<ContentType>()` to check what header it
is. And you get the typed value out by calling
`view.value::<ContentType>()`, which will return an
`Option<ContentType>`, similar to `headers.get()`.

Headers also now implement Extend and FromIterator, so it's easier to
build new Headers objects by filtering out a few headers.

Because this changes .iter() to return HeaderView instead of a tuple,
this is a:

[breaking-change]