expanded endpoint methods and wrapper objects

  * better endpoint class test coverage and fixture/mocking approach
  * friendly user-agent
  * more sane and scalable fixture mechanism
  * more better test coverage for endpoint classes
This seems anal, but I would say this logic should be extracted to a "find_hosts" or "resolve_hosts" private method (so, it has a self-documenting name) because then you know exactly what's going on here.

Put another way, these implementation details don't help you understand what this method is doing, so might as well hide them in a private class method with a self-documenting name.