Add environment detail and support user data

Added environment details and request details where available
Added additional param for init() to assign initial custom data
Added withCustomData to allow fluent assignment of custom data when
initializing or for later assignment
Added additional param for send() to assign additional custom data
specific to that call which will merge with but override any global
custom data