Add benchmarkJoinSize which pre-allocates the []string slice

benchmarkJoin() naïvely append()s strings onto a []string. When the
underlying slice reaches capacity, it is reallocated.

benchmarkJoinSize() uses numConcat to size the slice's initial capacity. This
has different effects based on the relationship of this capacity number and
the actual number of strings:

  * If the slice is too small, it will be grown by append(), ultimately
    degenerating to benchmarkJoin()'s behavior.
  * If the slice is too large, memory is wasted proportional to the overage.
  * If the slice is sized correctly, there is no penalty at all.

This method is therefore useful outside synthetic benchmarks, in any
situations where string concatenation speed is important and the caller has
a guess as to the number of strings needing to be joined.

benchmarkJoinSize beats every other method at every size in terms of
allocs/op. On my system, it's also the fastest in terms of ns/op at each
size except 10000, where it loses to BufferString by 14%.
Merge pull request #3 from willglynn/join_size

Add benchmarkJoinSize which pre-allocates the []string slice