Added support for different variables dumpers.

Originally all variables were dumped using `fmt` module. I've extended
Log object for custom dumpers. Now `log.New` method requires two
methods: print and printf, which should should dump a variables to a string.
They should be compatybile with `fmt` module or `spew`.

During a bit of refactoring this commit optimizes logging a bit by not
dumping a log message if not needed (eg a log has to low level to be
handled by any handler)