Logging api

Reviewers:  @bernerdschaefer, @peterbourgon 

First pass at the internals of the logging API.  This is two layers thick.  There is a RingBuffer for log messages, and on top of this is a data structure that implements storage for and operations for each container.  (The RingBuffer probably should have been a separate submit.)

The next piece to be worked on will be the HTTP logging interface.
channels are comparable, and thus can be used as keys to a map:

```go
type containerLog struct {
  listeners map[chan string]struct{}
}

func (*containerLog) Listen(logSink chan string) {
  // ...
}

func (*containerLog) Unlisten(c chan string) {
  // ...
}

func (cl *containerLog) addListener(c chan string) {
  cl.listeners[c] = struct{}{}
}

func (cl *containerLog) removeListener(c chan string) {
  delete(cl.listeners, c)
}
```

This lets you get rid of the id generation stuff. For an example, see `container.go`, lines 125-131 and 153-156. I think Subscribe/Unsubscribe would also be good verbs for the loggers.