added support for persistent connections (aka don't close the socket after serving one message)

also exposed functionalities to build clients, so now libshardcache is also a client library which
doesn't require to be used only if starting a new shard instance.

added a NOOP header to the protocol, can be used to check if the connection is still alive
without triggering any action

using a ringbuffer instead of a flat buffer in the input handler to minimize
reallocs and memoves while more data arrives