Purge lazy evaluation
Use non-type-checking ctypes when calling generated code
profiling: make timers do nothing if profiling is off
Make versioning tests more lenient

We only care that the version increment, not the exact values.
Ensure parloop._run bumps argument versions
Expose ParLoop object in user API
Add ParLoop.replace_arg_data

Replaces the /payload/ of an arg in a ParLoop with a new data entry.
Used for calling the same ParLoop object multiple times assembling into
a new Dat/Mat (say).
sequential: save JITModule on ParLoop

We'll use this to bypass some work when calling it again.
sequential: implement replace_arg_data

Needs to update the jit_args.
Save set partitions directly on sets

We will probably use these more than once, so don't continually build
them.
OpenMP: Save JITModule on ParLoop
OpenMP: implement replace_arg_data
OpenMP: save plan on ParLoop
Squeeze away more overhead
Save zero ParLoop, rather than just kernel (more squeezing)