centralize logging and make it pluggable

This request does two things, it centralizes logging to the `log.go` to remove some code duplication with respect to logging.  It also make the log an interface so that people can easily drop their own logging structures in.

The structure simply needs to implement the following methods:

```go
	Debugf(format string, v ...interface{})
	Infof(format string, v ...interface{})
	Warnf(format string, v ...interface{})
	Errorf(format string, v ...interface{})
```