refactor: templatize socket type from embedded_server_socket

This change is required to allow the reuse of same implementation to
different socket types (such as pure TCP and SSL).

Also, as suggested by Bjorn Resse, if the user cannot guarantee
synchronization of calling async operations, it is crucial to allow
some kind of customization point that will let the user to add implicit
synchronization (such as asiomq::basic_queue_socket[1]).

This design mirrors the asio's ssl::stream[2] choice of templatizing the
socket type itself rather than the Protocol.

[1] http://sourceforge.net/p/axiomq/code/ci/master/tree/include/axiomq/basic_queue_socket.hpp
[2] http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/ssl__stream.html