Do not set the singleton inside init

This allows one to create a separate client instance without worrying if the client instance will be set as the singleton. The class still supports a singleton, but must be explicitly set.

In addition, this uses the instancetype return types for better complier inference.

Fixes #41