Separation of Data from Interface

Reduced the need to cast by postponing the instantiation of HTTP
specific classes until the point they are required. The correct type is
then allowed to propogate back up the inheritance structure via native
upcasting.