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 
The tests always mock out the underlying Botocore session so we never make a real request. All of the Boto 3 tests do this.

I thought of exposing the user agent as a property, but it's not part of our spec. Also, do we want to expose this on the resource and client objects? What about having a slightly different user agent for resource actions?

Also, what's the expected behavior if I create a client using a session, then modify the session's user-agent? Does the client have that updated user-agent when making requests or should it always be a copy-at-creation operation?