all the things

- [x] use subclasses for Micro and Macro
- [x] use benchmark js's built-in setup functionality so setup doesn't skew tests.