server: Check if error was nil before checking info ptr.

Fixes nil ptr deref on error :/
server: Allow processing requests in parallel.

The protocol supports pipelining. Each request is now dispatched to its
own goroutine for processing.  I'm protecting the connection with a
mutex so that the entire buffers gets written without any interleaving.
Not sure this is strictly required.
server: s/sendErrorResponse/writeErrorResponse/g