Add explicit logging interface

Purpose
-----------

Previous version of logger provided only global functions what is inconvenient in case if you need to operate an interface object.

Implementation
--------------------

This commit introduces explicit `Logger` interface, changes all the loggers to the `Logger`, introduces `GetLogger` - global logger while preserving the original global functions.

@r0mant @jeremyschlatter please review.
You can use `io.WriteString` here and below. `io.WriteString` uses the `Writer`'s `WriteString` method if it exists, saving an allocation and a copy.