change write_response requirements to let the user fill content-length

This change purpose is to support HTTP methods such as "HEAD".
add more tests to algorithm (a bunch of variations of empty lists)
add new algorithm to header.hpp: header_value_for_each
refactor string_ref usage

Where it makes sense, algorithm requirments were relaxed to require only a
StringRef instead the whole String concept.

Also, generalized some algorithms that previously required a concrete
boost::string_ref object to support any object implementing the
StringRef concept.
refactor: suffixed type declarations within polymorphic_server_socket

This change's objective is to avoid naming clashing in the future, when
a possible HTTP client implementation kicks in.