epic refactoring for our purposes

focused on formats that we are currently considering, removed others

tried multiple canonical structs, not just primitives

removed time from structs for now (should add again later)
1) We don't control the number of iterations. b.N is set automatically by the go benchmarking code, and the results are averaged across all iterations. Are you proposing that we write another layer on top of the go benchmarking tool that does multiple runs and compares the results to make sure they are consistent?

2) The overhead of random number generation doesn't matter, because we reset the benchmark timer after generating the input data.

I'm trying to control for the influence of any determinism in the inputs by making them completely random.