Use TYPE(BITS) macro consistently to construct type names.
Catch attempts to treat unstructured types as structured types.
Explicitly handle non-array values masquerading as arrays.

```ocaml
(* Build a type of ints masquerading as arrays *)
let array_view = view int
   ~read:(fun _ -> Array.make char 0) ~write:(fun _  -> 0)

(* Build an array of array_views *)
let a = Array.from_ptr (allocate_n array_view ~count:1) 1

(* Coerce the array of "arrays" to a Bigarray.Array2.t *)
let _ = bigarray_of_array array2 Bigarray.char a
```