Add http::chunked_encoder:

This transforms a ConstBufferSequence into a new ConstBufferSequence whose
data is encoded according to the Content transfer encoding rules of RFC2616.
The implementation does not copy any memory but also does not coalesce
buffers into larger ones if the input data is in small pieces.
Reviewers: @rec @donovanhide
The next block is conceptually simple - so why is it so hard to read? Why did I initially get it wrong, and look for a second argument to `encode()`?

Part of it is the indentation, which seems to serve no specific purpose other than to say, "Look!  I'm on a new line!"  Why indent each parameter more than the previous?  It just makes it hard to read, because you can't when a method or function call ends.

If you use indentation the way that most of the rest of the team does, you get:

    log << encode(std::string(
        boost::asio::buffer_cast<char const*>(buf),
        boost::asio::buffer_size(buf)));

which makes it so clearer what the two parameters are.

Another example:  tell me what's going on here:

    someComplexFunction(
        aReallyReallyLongFunction(
            itsReallyLongHere,
                 moreLongStuff(variable, variable, variable)),
                     ashorterFunction(1, 2, 3  4 ),
                         aReallyReallyLongExpressionHere,
                             aReallyReallyLongExpressionHere);

explanation here:

    someComplexFunction(
        aReallyReallyLongFunction(
            itsReallyLongHere,
            moreLongStuff(variable, variable, variable)),
        ashorterFunction(1, 2, 3  4 ),
        aReallyReallyLongExpressionHere,
        aReallyReallyLongExpressionHere);

We have tons of code like this, and it's so much easier to read when the indentation corresponds to the actual depth of nesting and not "how many lines have gone by".

I'm not going to hold up this changelist but I do find your code harder to read than anyone else on the team, and I wanted to explain why.