Prevent orphaned sockets after request

Request should always return if a timeout is set.
The gen_server call no longer times out and leaves the gen server in a state it is unresponsive.

Kept any exported functions having the same interface.

Happy for feedback on changes made though, the whole passing the Timeout down the chain is a bit messy.