Fixed a bug when two meshes of the same type were declared with
different dimensions:

     uniform mesh MyMesh {
       ...
     };

     ...

     MyMesh m1[10];
     MyMesh m2[4,4];

     forall cells c of m1 {
       // CELL COUNT == 16!!! 'm2' clobbered 'm1' dimensions.
     }

Still need to revisit logic in the ASTContext for not duplicating
identical types (i.e. need to check mesh dimensions and if equal
may re-use type).  This only holds for uniform meshes.
Added a new intrinsic rank() for use within 'forall' mesh constructs
(returns dimensions of target mesh).

Added a warning when a mesh dimension call (e.g. height(), depth()) is
called for a mesh of conflicting rank -- calling depth() with a mesh
of rank 2.

Made a small attempt to avoid recreating mesh types (related to previous
commit's bug fix) -- however, it is really not ideal (probably provides
no benefit) -- in Scout/ASTContext.cpp.

Currently messing with case of 'width', 'height' and 'depth' builtin
calls -- dropped leading case.  Still needs testing and will currently
break many of our regressions...