Fix URL handling bug and improve URL parsing.

The URL callback was interpreting the data only from one call. The http parser may call it multiple times.
Switched to using http_parser_parse_url and setting fields individually.
Some of these fields are irrelevant in an http server (host, port, fragment), since well behaved clients won't send them, but we might as well handle them since there isn't a significant perf penalty to checking a few constants.