Number of changes to URI code

* Turn example into stricter unit test.
* Use boost::optional for optional value types.
* Use std::numeric_limits
Show how to handle custom URI parameters
Simplify the bitcoin amount parser

Besides having a movable decimal point, this code is shorter and
has fewer corner cases.

It was also written before the other algorithm, but is being rebased on top.
Round results in the bitcoin amount parser