Asyncprogress

Rebased and fixed. Replaces #175 and #181. Closes #169.
Why not just an Execute(ExecutionState&) with a default implementation that simply calls Execute(), and then a default Execute() which does nothing?  This would keep backwards compatibility, and still allow people to override as they wish.