Test Fetcher re-worked for asynchronous operations

Thing list is difficult to test, it automatically launches goroutines.
This is almost certainly against the best practices of go, but it
simplifies the interface and still allows asynchronous fetching. The
test fetcher was re-written so that it could be tested without a race
condition.