ThisWasTheProblem - websocket_transport no longer captures this pointer

Capturing `this` pointer in task lambdas is problematic because the task may run after the object gets out of scope or is destructed. The websocket transport tasks were rewritten to not capture `this` pointer anymore. In the future in cases where we need to be able to access members of `this` we will pass it as a smart pointer.
ILog - adding a logger class and a simple implementation for log writer