No need to be calling from main thread
Use anonymousId if userId is not passed in
Allow default options. Reduces object allocation and helps gc
Transparent caching for traits, allow null options
Make a defensive copy for default options. Allow null properties
Add Shutdown API