More predicates

1.  Integers are valid dimensions (is there a reason to avoid this @mwiebe ?)
2.  Repurpose `isscalar` predicate to tell if something is a type like int32, float32, string (can anyone think of a better name?)
3.  Add a variety of other predicates like isrecord, iscollection