[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.
Add IsLXCSupported()
Added tests

Added tests for the following cases:

* Mallformed cgroup file
* Missing cgroup file
* system juju is running on is not linux
use filetesting
Responded to feedback
Refactor the UserManager and commands.

This branch adds consistency to the UserManager.
Primarily around the use of tags to pass the usernames.
Also untangles the API client from the server that was
there with the user manager structs being defined in the
apiserver package (not params).

The commands have been hooked up, and tested manually.

There were several clear changes needed when testing:
 * until we have multiple environments, creating a user
   should cause that user to have access to the environment
 * when adding a user, we should always write out the jenv
   file (until the user is able to login and see themselves)
 * the remove user command has been renamed to disable,
   as it wasn't removing the user at all (this is still todo)
Merge branch 'user-manager-tag-redux' into juju-user-list
Add a method to state to get all the users.
Add apiserver changes to return all users.
Add a list command for users and hook it up.
Merge remote-tracking branch 'refs/remotes/origin/master' into status-filtering
Migration code for JobManageNetworking added, tests still missing.
Holistic unit-chain matching.

- Situations in which the entire chain of units and their subordinates do not match are now handled correctly.
Added reboot worker
respond to feedback
Respond to feedback
remove locks
cleanup
Make pre-push hook a little more friendly

 * If deleting a remote branch; don't do the full verification pass.
 * If there are no changes to push, don't do the full verification pass.
 * If there are unstaged or uncommitted changes then the verification
   pass doesn't really help, so prevent pushing when there are unstaged
   or uncommitted changes.
 * If there are no .go files in the changelist, skip full verification
   pass.