Optimize field storage for meshes, plus various small tweaks

Fields in meshes are now stored using the new UntypedArray class,
which is ABI compatible with Array.  This allows holding references
to fields that persist across mesh topology changes, as long as no
new fields are added or removed.

In addition, this commit includes the following minor tweaks:
1. Properties on meshes are called fields to match the Field type.
2. The permute routines have been pulled out into a permute.h header.
3. Improve numpy rank-mismatch errors
4. Fix repr for '\0'