Use declarative fields for task inputs that need TaskDatabase to resolve
This has these intended advantages:
- it makes tasks easier to write
- it makes specific task implementation code not need
TaskDatabaseInterface - it allows redesigning the way things are looked up without having to touch every single task implementation
It only refactors external and signing tasks, as we may yet decide to redesign server tasks and workflows without TaskDatabaseInterface, for example using WorkRequest.lookup_* methods directly.
For an example of a redesign of the lookup, it would now not be unthinkable to add a way to run tasks that looks at the fields in a task, builds an argparser to input them, and runs the task on the command line without a database (I thought we had a blue sky issue for that?), which should give an idea of the freedom this gives for further redesigns