Merge, refactoring, additional filters, tests.

- Merge branch 'master' into status-filtering.
- Filters moved into their own file.
- Now filtering machines as first-class objects.
- Filters broken down into atomic operations for re-usability.
- Meat of tests is now present.