RFC: Coercible and HasPrefix for Zero Cost Coercions

This is largely based on (with lots of copied text) @glaebhoerl's proposal in mozilla/rust#9912, but with a few changes:

- I formalized the idea of "contexts" by using GHC's roles.
- I used this role system to include user-defined pointers and data structures.
- I dropped contravariance for simplicity. This may have been a bad idea, but it's unclear how useful contravariance is.