Improve test coverage for the health package and remove mocks

The current tests for the health package utilize a fake HTTP client
for testing health checks and only cover a limited set of test cases.

This patch removes the need for mocks by using the httptest package
from the standard library. After removing the fake HTTP client a bug
was found in the health.Check function; it incorrectly assumes that
a http.Response is always non-nil. Fix the issue by moving the defer
that closes the http.Response.Body after error handling.

Related tests in the registry package have be refactored to work with
the changes made to the health.Check function. All methods that implement
the health.HTTPGetInterface interface now return a http.Response with
with a noop http.Response.Body.

This patch does not introduce any changes in behavior.
@monnand, the analogy doesn't hold-- fmt.Printf causes a side-effect that outlives an iteration of the loop. While this code does leave a test server around for each iteration of the loop, and it's true that, should a request get routed to the old test server, it would return with a different tt than it started out with, nothing can access these leftover servers, so there's not actually a problem here. (Disclaimer: I haven't actually run this code, but I think travis would fail it if it were actually racy-- we turned on the data race detector, right?)