Generate tests and benchmarks; better support for empty-interface

Lots of things:
 - Better support for `interface{}` (and, consequently, `map[string]interface{}`)
 - A fix for `CopyToJSON`
 - Generation of tests and benchmarks. Right now we run the tests on the zero value of the struct, b/c of [this issue](https://code.google.com/p/go/issues/detail?id=8818).