Improve `toString()` serialization performance

Switch from `array.join()` to standard string concatenation to dramatically improve performance of serialization.

I ran some tests locally using `process.hrtime()` and using basic string concatenation is a huge improvement over using intermediate arrays.

### Benchmarks

I added some benchmarks to this package to get a rough idea how it performs with a small, medium, and _huge_ data sets.

#### Before

```
simpleObj:
JSON.stringify( simpleObj ) x 1,339,743 ops/sec ±1.02% (96 runs sampled)
serialize( simpleObj ) x 555,898 ops/sec ±1.57% (90 runs sampled)
simpleExposed.toString() x 200,108 ops/sec ±2.38% (89 runs sampled)


YUI_config:
JSON.stringify( YUI_config ) x 37,865 ops/sec ±4.20% (77 runs sampled)
serialize( YUI_config ) x 13,052 ops/sec ±2.95% (93 runs sampled)
appExposed.toString() x 8,540 ops/sec ±3.80% (89 runs sampled)


App.Cache:
JSON.stringify( App.Cache ) x 523 ops/sec ±1.69% (94 runs sampled)
serialize( App.Cache ) x 143 ops/sec ±10.35% (68 runs sampled)
resExposed.toString() x 150 ops/sec ±10.80% (75 runs sampled)
```

#### After

```
simpleObj:
JSON.stringify( simpleObj ) x 1,346,714 ops/sec ±0.68% (100 runs sampled)
serialize( simpleObj ) x 631,145 ops/sec ±1.22% (91 runs sampled)
simpleExposed.toString() x 361,795 ops/sec ±1.68% (96 runs sampled)


YUI_config:
JSON.stringify( YUI_config ) x 48,044 ops/sec ±0.93% (96 runs sampled)
serialize( YUI_config ) x 13,058 ops/sec ±2.20% (93 runs sampled)
appExposed.toString() x 9,140 ops/sec ±2.83% (94 runs sampled)


App.Cache:
JSON.stringify( App.Cache ) x 510 ops/sec ±1.48% (92 runs sampled)
serialize( App.Cache ) x 181 ops/sec ±1.34% (87 runs sampled)
resExposed.toString() x 189 ops/sec ±0.56% (90 runs sampled)
```