Pure logging manipulation

Pure implementation of CanLog type class. Instead of writing log messages
into console it appends log messages into WriterT log. It uses DList for
better performance, because messages can be added only at the end of log.
But it uses unsafePerformIO so use with caution within IO.

TODO: Should we use some Data.Tree-like structure to observe message only
by chosen logger names?