Avoid use of Variant for run(Worker)Task to enable use of certain classes of types.

Especially some shared qualified types and types with elaborate assignment/destruction resulted in runtime errors before. Now the values are directly stored in a void[] array.
Implement a simple Future!T type. See #490.
Fix compilation on DMD master.