Http api shards

@dgnorton `append()` is a lot slower if you're not specifying the slice capacity (i.e. the 3rd arg in `make()`). I ran a benchmark of `append()` vs direct index with different slice sizes:

```
                 1      10     100   1000
               ---------------------------
Append        | 88ns | 63ns | 23ns | 14ns |
Append+Cap    | 88ns | 16ns | 10ns |  8ns |
Index         | 84ns | 14ns |  7ns |  6ns |
```

These numbers are all per element insertion time. The time difference between "`append()` with a capacity" and direct indexing is only about 2ns per element. I don't think it's worth the extra code complexity to do direct insertion.

Here's the bench code:

http://play.golang.org/p/W_XQUQ0JPF

(I had to divide the resulting bench times by the number of elements to get per element timings)