Pulled out HazelcastClientInstance

Fixes #3781

Also improved documentation and minor cleanups
I think it is because we don't want user to access to methods of HazelcastClientInstance by casting HazelcastClient to it. All and only allowed methods are available in HazelcastClientProxy.