An initial implementation of MongoDB storage for bakery.

How about something like this instead?

    // collection returns the collection with a copied mgo session.
    // It must be closed when done with.
    func (m *mgoStorage) collection() collectionCloser {
         c := s.coll.Database.Session.Copy().DB(s.coll.Database.Name).C(s.coll.C)
         return collectionCloser{c}
    }

    type collectionCloser struct {
          *mgo.Collection
    }
    func (c collectionCloser) Close() {
         c.Collection.Database.Session.Close()
    }

Then the various callers would be written:

     collection := s.collection()
     defer collection.Close()

and we produce no more garbage than necessary.