'requires' should take a string or list

* 'requires' can be a task name, or a list of task names. No
use case for a dictionary.
* added convenience methods to get requires.
* minor fix with TaskSpec: get_dict... returns {} not None.

Change-Id: I1c9ef4ab41679e10d8aab38dfae68f169608bd22
Merge "'requires' should take a string or list"