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.
@lavalamp Are you sure? The [following code](http://play.golang.org/p/Cc3KwHdyqH) will be wrong even if we only print the value in the goroutine and no write operation happens:

```
package main

import (
	"fmt"
	"sync"
)

func main() {
	slice := []int{1, 2, 3, 4, 5}
	var wg sync.WaitGroup
	for i, v := range slice {
		wg.Add(1)
		go func() {
			fmt.Printf("%v is %v\n", i, v)
			wg.Done()
		}()
	}
	wg.Wait()
}
```

``tt`` will be changed between loops and might be a race. Probably you may need to pass ``tt.status`` as the parameter?