fix#274, fix#270, fix#268, fix#265fix#261, fix#257, fix#256, fix#251
The guts of the url are moved into a private
implementation detail which can be accessed
by various parts. Rules that the user doesn't
need are made private, and the public rfc
rules use the well defined types.
Paths is still remaining to be done.
The Rule concept is changed:
* rules are stateful values
* nested value_type holds the result of parsing
* member function `Rule::parse` is the algorithm
* parse returns `result<value_type>`
And:
* All rfc3986 rules are reimplemented
* New grammar non-terminal elements introduced:
- char_rule
- not_empty_rule
- optional_rule
- sequence_rule
- variant_rule