Attempt to implement socket timeout handling.

If server.js is blocked up to such an extent that the python
side can't get what it needs, we want to timeout on _both_
sides. This attempts to ensure that.

Also modernize logger handling.
Attach a unique id to every request for use in logs.

Otherwise debuggin is very hard to trace. The goal is to
find started requests that never terminate.
Log the actual end of a request

This wasn't originally done because the scope of 'id' was not
broad enough. Now it is.