bakery/checkers: add Declared and InferDeclared

This allows macaroons to declare information by adding a first-party
caveat. The declarations inferred are valid after caveat checking because
we guarantee to check all discharge macaroons when verifying. A client can
add another declaration caveat, but they can't change the value of an existing
declaration.

To come: built in support for third party caveats that require a set of
declarations to be added when discharged.
I'm not sure if it's intended behaviour, but it could be possible to a user of this library to created a declared caveat without knowing they exist.

Let's say a user doesn't know about declared caveats and has decided that they want to mint a macaroon - but they've designed it with a caveat that uses declared as a condition:
```
m, err := svc.NewMacaroon("id", rootKey,[]Caveat{{"declared", "user-bob"}}) 
```
Is that likely to cause any problems.

Put simply - aren't we saying that "declared" is a keyword reserved for declared caveats - in that case do we want to choose a more unique name - and maybe have this defined as a const?