Verify provides and requires

When flow is being constructed we ensure that it is actually valid by
checking its invariants:
- for linear flow, no item should depend on items that are executed
  after it;
- for unordered flow, items should be independent.

We also add check that all necessary provides were injected to storage
before actually running flow.

Implements: blueprint flow-verification
Change-Id: I499898f543505b7dd6f82716ae8f4011cb08f601