Switch to a radix tree to speed up Find()

We're always doing prefix searches, so this patch moves to a data
structure optimized for that.

Representative benchmark:

Old:

Summary:
  Total:	0.1457 secs.
  Slowest:	0.0529 secs.
  Fastest:	0.0077 secs.
  Average:	0.0330 secs.
  Requests/sec:	1372.2273
  Total Data Received:	122000 bytes.
  Response Size per Request:	610 bytes.

Status code distribution:
  [200]	200 responses

Response time histogram:
  0.008 [1]	|∎
  0.012 [2]	|∎∎
  0.017 [7]	|∎∎∎∎∎∎∎
  0.021 [14]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.026 [25]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.030 [31]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.035 [37]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.039 [28]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.044 [24]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.048 [19]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.053 [12]	|∎∎∎∎∎∎∎∎∎∎∎∎

Latency distribution:
  10% in 0.0201 secs.
  25% in 0.0260 secs.
  50% in 0.0331 secs.
  75% in 0.0407 secs.
  90% in 0.0467 secs.
  95% in 0.0491 secs.
  99% in 0.0522 secs.

New:

Summary:
  Total:	0.0276 secs.
  Slowest:	0.0153 secs.
  Fastest:	0.0002 secs.
  Average:	0.0053 secs.
  Requests/sec:	7243.6276
  Total Data Received:	122000 bytes.
  Response Size per Request:	610 bytes.

Status code distribution:
  [200]	200 responses

Response time histogram:
  0.000 [1]	|
  0.002 [46]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.003 [43]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.005 [25]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.006 [11]	|∎∎∎∎∎∎∎∎∎
  0.008 [24]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.009 [9]	|∎∎∎∎∎∎∎
  0.011 [8]	|∎∎∎∎∎∎
  0.012 [11]	|∎∎∎∎∎∎∎∎∎
  0.014 [10]	|∎∎∎∎∎∎∎∎
  0.015 [12]	|∎∎∎∎∎∎∎∎∎∎

Latency distribution:
  10% in 0.0008 secs.
  25% in 0.0019 secs.
  50% in 0.0041 secs.
  75% in 0.0081 secs.
  90% in 0.0125 secs.
  95% in 0.0141 secs.
  99% in 0.0152 secs.