Add benchmarks

Benchmarks to help compare different implementations.

I also converted some of the implementations to classes to there was a consistent interface to aid in the benchmarking. Other implementations can be easily added to the benchmark as long as they respond to `calculate`. Seemed cool.