Encapsulate session management, remove race-conditions in call/release

- use proper exception sub-classing
Add easylogging++ library