Make Uri an OrderedType and thus suitable for Maps and Sets

Comparator ordering by host, scheme, port, userinfo, path, query, and finally fragment. Designed to produce a reasonable sort order.

Opinions on this order?
maybe just style but i find 

```
match String.compare k k' with
| 0 -> compare_list String.compare vl vl'
| c -> c
```

easier to read than if/else. Subjective, can be ignored if you dont agree