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.
The infinite loop scenario is a good point and something we definitely need to consider in our client code. 

The "two values for the same key" situation is not something that should ever happen in our normal flow,  but we have to consider the client as a potentially malicious attacker who is able to add caveats at will.  That's the situation we are considering here.