Basic coercion support 

Coercions between arbitrary pointer types, coercions through views, and coercions to void.

```ocaml
   val coerce : 'a typ -> 'b typ -> 'a -> 'b
```

Start of a fix for #22; more to follow.