Add `ApPointed` and `ApApplicative`; Remove redundant `ApAlt` and `ApEmpty` classes

The old `ApAlt` and `ApEmpty` classes don't need to exist; instead, `apEmpty` and `(<<|>>)` are implemented using `ApApplicative` and `ApFunctor`.

`ApPointed` needs to be a separate typeclass to prevent an ambiguous type problem when recursing with `apPure`.

I haven't verified that the `Rec` instances satisfy the `ApApplicative` laws.