Correctly responds to inactive update puller

There are different use cases for the update puller. Some cases are OK
with observing the puller becoming inactive while awaiting the condition,
others aren't. This different existed already, but only as a check before
the call and inside await an exception was thrown when this happened. This
commit moves the difference in handling an inactive puller into await
where the caller can decide how to handle it.
Merge pull request #3696 from tinwelint/2.2-update-puller-inactivity

Correctly responds to inactive update puller
Return no plan from expand/join if the subgraphs cannot be planned (i.e., they are not in the cache)
Exhaustive planner can plan cartesian products
Exhaustive planner can plan optional matches - WIP