[WIP] Support for filtering status on different criteria.

- From spec: https://docs.google.com/a/canonical.com/document/d/1olIjfnMIKPbNMmNBhfjwlnzdRvY-xBKygpIOhv7QIkE/edit#heading=h.tdsd6gcvc55e
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.
Merge remote-tracking branch 'refs/remotes/origin/master' into status-filtering
Holistic unit-chain matching.

- Situations in which the entire chain of units and their subordinates do not match are now handled correctly.
Added functionality for stubbing embedded machines.
Merge remote-tracking branch 'refs/remotes/origin/master' into status-filtering
Mostly working set. Services are not being filtered.
Addressed review-points.

- Removed dead code/tests.
- Corrected it's to its in comment.
- Addressed possibility of bad/no public/private IP addresses on a unit when filtering.
- Reordered imports in filtering_test.go.
- Switched some log output to debug rather than info.
- Renamed some variables for disambiguation.
Temporarily disabled tests failing b/c of 1385456.
Merge pull request #964 from katco-/status-filtering

Status filtering

Spec: https://docs.google.com/a/canonical.com/document/d/1olIjfnMIKPbNMmNBhfjwlnzdRvY-xBKygpIOhv7QIkE/edit
Review: http://reviews.vapour.ws/r/87/