Actions that are done/cancelling/cancelled can't be cancelled

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Implement state change API

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Use const types everywhere

Somehow I was previously convinced that the first type annotation propagated to
all other types in the const() declaration. That's not true, so we should
annotate everything (and fix the compiler errors as they arise) so that only
the Right types can be used.

Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>