Add more tests of laziness

Linear algebra operations don't force evaluation, so those are expected
to fail in combination with lazy par_loops.  Similarly, data accessors
on device don't correctly force evaluation, so those are expected to
fail too.
Expand documentation of trace.evaluate

Describe more clearly how the reads and writes arguments work.
Don't require user to build sets to pass to trace.evaluate

Rather than requiring the arguments to be sets, accept either an atom,
or any iterable and convert it to a set.
Use public data accessors in linear algebra ops on Dats

Since computation that writes or reads to a Dat is lazy, we must use
public accessors to get at the data for the operands.
Fix trace evaluation for .data accessor on device backends

We need to request evaluation of both reads and writes, not just reads.
Make reads and writes arguments to trace.evaluate optional
Force evaluation on device when using data_ro accessor