Allow querying for multiple machine types

Using /nodes/?machine_type=type1|type2|type3
Allow querying Nodes by locked_by
Rename NodeController.index_post() to index_put()
Add ErrorsController.forbidden()
Add an API for locking a single node

It will throw a 403 error if it is already locked.
Consolidate NodeController.lock() into one method

It can be used for locking, unlocking, or checking lock status. Also add
more tests.
Update Node.locked_since when updating Node.locked

With tests!
Add ErrorsController.unavailable()
Add NodesController.lock_many()
Add logging to lock and unlock operations

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Populate Node.description

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
In NodeController.index(), return a 404 message

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Actually format the error message

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Don't use semicolons in error messages

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Correct verb

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Reset locked_by when unlocking a Node

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Tweak logic of setting Node.up

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Don't recycle locks if description isn't passed

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Log Node updates

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Allow querying Nodes by Node.up

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>