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.
Aha. Was that recorded anywhere? (Also paging @cyli; if we're thinking about the same conversation, ISTR she had some opinions :))

I feel like I'm missing something, because I don't quite understand why the *matrix* has to be documented. Consider:

> Calling this endpoint will remove a server from a scaling group.
> The `replace` argument (default: true) determines if the server will be replaced with a new server using the group's launch configuration.
> The `purge` argument (default: true) determines if the server will be deleted. Setting this to false can be useful, for example, if a particular server is behaving erratically, and you would like to remove it from the scaling group while still getting a chance to investigate it.

That is: as far as I can tell, these things are orthogonal. So:

- We don't have to document every possible interaction.
- Every interaction is sensible.

The main issue I see is that, because they are orthogonal, what happens if I want to detach a server but replace it? With this, it's obvious: `replace=true&purge=false`. What happens if I want to detach a server and not replace it? `replace=false&purge=false`. Easy. What does that look like with a separate detach endpoint? Does that thing also grow a `replace` query argument, or do we simply not support replacing when detaching, or *only* support replacing when detaching?