Detach servers (remove from group without removing in Nova)

This adds the "detach" feature to the API.

- I used the term `purge` to mean "also kill the machine in Nova". I started with `delete`, but it seemed really awkward to have a DELETE request that is documented as deleting a server and then has a `delete` query argument...
- I spent a good chunk of time cleaning up the tests and fixing docstrings. It would be useful to give those a close (review) inspection to make sure I didn't screw it up.
If I understand you correctly, you are suggesting that rather than patch `extract_bool_arg`, we just use a request with the args already specified (which is what you meant by `Request(Channel(), True)`)?

We don't actually use a full `Request` object for these tests, we use a mock `Request` object that is part of klein.  You might be able to just pass the endpoint to `self.assert_status_code`, which takes an optional `endpoint` parameter (which defaults to `self.endpoint`).  https://github.com/rackerlabs/otter/blob/detach/otter/test/rest/request.py#L62 does some query arg mangling.