refs #82: consolidated user agent

This may be a terrible idea, but it feels warranted. The idea is to cut down on duplicate logic in the various classes that need to have access to the user agent string while also having a sensible default if not set by the user. 

**Needs testing.** @wsnook Feel free to take a crack if you're feeling adventurous, otherwise I'll get to it tomorrow.