refactor

* broke out functionality into it's own classes.
* no more BenchmarkRequires.initialize! method (felt weird), using self.setup! instead
* added more tests
* rewrote README.md to reflect newest changes.