refactored a bit, to allow for caching hooks
moved URL forming out of __call__()
fixed timeout behavior so that default socket timeout doesn't get cleared