CassandraConnector shares core driver Session objects. Previously it sha...

...red only Cluster objects and a separate Session was open per every Spark task. This had a significant performance overhead in terms of CPU, networking and memory use, because every Session object manages an internal pool of connections to all cluster nodes. Fixes #41 and #53.
Yes, we do. I almost changed it to using a shared SessionProxy and then realized it was not a good idea. The main purpose is protection against double closing the session. Closing SessionProxy is not really closing the session, becasue sessions are shared. Instead, refcount is decreased. But double closing the same Session reference must not decrease refcount twice. Therefore there is a guard in SessionProxy so any subsequent `close` calls on the same SessionProxy are a noop.