Simplify data provider loading.

Basic data providers just return a lump of examples on the CPU.

Parallel data provider is responsible for copying to the GPU and
cutting into pieces as desired by the caller.
Checkpoint files now use zipfile.ZipFile; timing is now cumulative.

Avoids having to read model state information unless desired.

Cumulative timer avoids painful issues with CUDA returning early.
This results in incorrect elapsed times and general pain.
Add eztimer
Add test for cifar loader.
Synchronize after batches to ensure proper timing.

This also ensures that we give up the python lock while CUDA
is crunching.

Update usage of model data ('model_state' is gone).