Check body in TestFailoverErrorPageAllServersDown

Check the response body to see if we get the expected error page. At the
moment both the mocks and the real CDN give us Varnish's default error page.
Per the comment, this may change in the future.

Refactored to use the constant for the status code while I'm here.
Merge pull request #54 from alphagov/check_error_page_body

Check body in TestFailoverErrorPageAllServersDown
CDNBackendServer.Start() and .ResetHandler()

Move the starting of a CDNBackendServer to the struct itself so that we can
lazily create them with the name and port, then start them later on. This
adds symmetry to the Stop() method and will come in useful when we want to
re-start an already bound but stopped instance.

Also created a ResetHandler() method, extracted from StartServer(), which
we'll be able to call to reset an already started backend back to a sane
state before each test.
Create an ordered slice of backends

This describes their hierarchy as used by the CDN. It moves the initial
binding, with their names and ports, to init(). Then StartBackendsInOrder()
loops over them in reverse order starting and checking each one.

This will allow us to make the number of backends configurable for #51. In
addition to being able to resetting them in the correct order when we come
to check whether they are started for #50.
Add a IsStarted() method to CDNBackendServer

Which returns a boolean indicating whether the backend server has been
started or not. This will be used when resetting all backends.

I had hoped that net.Listener could tell us when the listener had been
Close()ed but it seems not. Another option was connecting to the address
reported by the server.Listener.Addr(), but that's quite a bit of work.

So instead I've opted to reset the server field back to nil after we've
closed it and report whether or not the field is bound.
Refactor out StoppableHttpListenAndServe

There's not much benefit to this being a separate function outside of
CDNBackendServer. It never returned a non-nil error so the anonymous
function goroutine in Start() was made redundant.

Now that we're using httptest.NewUnstartedServer() we have to create our
listener so we can catch errors from already bound ports there and it's
Start() method takes care of running Serve() in a goroutine so we don't have
to.
ResetBackends helper

Rename StartBackendsInOrder() to ResetBackends() and make it responsible for
resetting all backends back to a known good state; started, default handler,
edge considers healthy.

This can be called at the start by init() and then by any tests that modify
the backend state. If no backends have been stopped then it will be quick.
Use NewUniqueEdgeURL helper in waitForBackend

In doing so we can stop passing around the global pointer variable for
edgeHost. Which makes our calls to ResetBackends() much simpler.
Call ResetBackends before each test

So that a test is never affected by the state of a previous test that may
have stopped a backend or modified the handler.

This replaces some cases where we previously reset the handler to nothing.
It also replaces some resets at the end of tests.