Bind opaque C types as empty enums.

This improves type safety (can't implicitly cast between two opaque types) and
disallows constructing them by value.
rename Eq to PartialEq