Asyncprogress

Rebased and fixed. Replaces #175 and #181. Closes #169.
Would it somehow be possible to use some mixin perversion and friendship to enforce this?