Makes the logger use a plain io.Writer

Not sure why it was exposed as a func() to be perfectly honest.
Certainly seems overly complicated given that the way we use it is to
just pass in a formatted string. A Writer should be a sufficiently
general thing.
Adds some TODO items
Newline was missing from logger
Replaces use of internal interface with public type

Using the internal receiver interface in the public NewObserver and
NewCallbackObserver methods is not a very good idea.