func (s Slice) Bind() macaroon.Slice {
	if len(s) == 0 {
		return nil
	}
	ms := make(macaroon.Slice, len(s))
	ms[0] = s[0].M().Clone()
	rootSig := ms[0].Signature()
	for i, m := range s[1:] {
		m1 := m.M().Clone()
		m1.Bind(rootSig)
		ms[i+1] = m1
	}
	return ms
}
Bind prepares the macaroon slice for use in a request. This must be
done before presenting the macaroons to a service for use as
authorization tokens. The result will only be valid
if s contains discharge macaroons for all third party
caveats.

All the macaroons in the returned slice will be copies
of this in s, not references.
package bakery
import (
	"fmt"
	"time"
	"golang.org/x/net/context"
	errgo "gopkg.in/errgo.v1"
	macaroon "gopkg.in/macaroon.v2"
	"gopkg.in/macaroon-bakery.v2/bakery/checkers"
)
type Slice []*Macaroon