! http: add q-values to charsets and encoding, improve content negotiation, other fixes, closes #677

 This is a larger commit refactoring the existing q-value implementation on media types and adding q-value support to HttpCharset and HttpEncoding. Most changes should be source-compatible, with these exceptions:

 - `MediaType` is no `MediaRange` anymore (however, there is an implicit conversion to the latter)
 - `HttpCharset` is no `HttpCharsetRange` anymore (however, there is an implicit conversion to the latter)
 - `HttpEncoding` is no `HttpEncodingRange` anymore (however, there is an implicit conversion to the latter)
 - `ContentType` is no `ContentTypeRange` anymore (however, there is an implicit conversion to the latter)
 - the `MediaRange::Self` type member is gone

 Additionally there are a number of new members on public objects and classes that could create name collisions in rare cases.