User Agent string is now easy to generate correctly

Client ctor has new optional parameters for constructing the user agent string.

The user agent string can still be set manually.

Added tests relavent tests.