Add the Ring type class.
Refactor the unit tests and remove some minimal instances
Remove the Identity functor, which is now detail::Identity
Add the IntegralDomain type class
Refactor the unit tests and examples

In particular, merge some unit tests and examples to reduce compilation
times.
Fusion: instantiate Searchable
Add support for perfect forwarding in type class methods
Split the type traits emulation.
Record: workaround weird ICE in LLVM codegen after adding perfect forwarding
Use `detail::injection` instead of a `std::tuple` in the tests
Uncover a bug with ADL-enabled operators
Core: use `when` instead of `enable_if` in `convert`
Searchable: add the `subset` method
Huge reorganization and refactoring.

- Split type class instances into separate files
- Instances provided automatically by a type class are actually MCDs
- Test each instance in a single file, not one file per method
- Refactor the operator system to fix the ADL-related bug.
Add the IntegralConstant type class
Re-add MPL vector.
Workaround bugs in libc++ when adapting std::tuple.
Re-add unit tests for Fusion adaptors
Remove the Foreign data type.

The Foreign data type made stuff like `to<int>` become
`to<Foreign<int>>`, which is not as clean.
Do not bring operators in the hana namespace automatically.

This caused an issue with types defined in the hana namespace and
type class instances for foreign types. For example, doing
`Integral{} == Integral{}` would hit the recursion depth limit
because `Integral` was defined in `boost::hana`, so ADL found
`boost::hana::operators::operator==` and we recursed in the foreign
instance for `Comparable`.