Make extruded sets a first class citizen

Rather than build an extruded set by passing a layers argument to the
Set constructor, we now build a Set and then build an ExtrudedSet on top
of it.  This is to facilitate writing a par_loop that iterates over an
extruded set but reads dats defined on the base set.  For example, in
extruding a coordinate field.
Allow iteration over extruded sets to read base set Dats

If we're iterating over an extruded set, reading a Dat defined on the
base set should be allowed (we should just not apply an offset).  Change
argument checking for parallel loops and code generation to allow this.
Better error checking and docs for layers argument