Set custom HTTP user agent.

This sets a custom user agent string if the underlying Botocore session hasn't
had its user agent string customized.

cc @jamesls, @kyleknap 
It creates a circular reference, which still works but I thought was discouraged. I don't mind moving this up to the top if that's what people prefer.