013 marshalbinary

Fix bugs in binary marshal/unmarshal code and tests.
check the signature too, please.

Perhaps a better way might be to add a function that checks
the entire contents of the macaroon by serializing to JSON.
Then you won't need individual checks.

e.g. (with error checking, of course)

    func assertEqualMacaroons(c *gc.C, m0, m1 *macaroon.Macaroon) {
        m0json, err := m0.MarshalJSON()
        m1json, err := m1.MarshalJSON()
        var m0val, m1val interface{}
        err = json.Unmarshal(m0json, &m0val)
        err = json.Unmarshal(m1json, &m1val)
        c.Assert(m0val, gc.DeepEquals, m1val)
}