If a task has an 'all'* tag, always run it even if not listed in --tags.

Make tasks with the 'all' tag ignore --start-at-task.
Add unittests for this, and other basic tag functionality.
Refactor so that both --list-hosts and normal runs use the same logic.

This has the effect of undoing the first half of commit
89ab3a0b9f6ebbbda7653f70abb2a9640ae7c2d6, so providing an invalid tag with
--tag or --skip-tags will no longer silently fail.