Some polish.

- Fix a few location-related bugs in [TypeChecker].
- Add a better version of [list::partition], that uses rich booleans.
- Fix the types of [bool::true] and [bool::false].
Adoption / abandon as a library.

This pretty much exposes the built-in "give" and "take" operations as library
operations, except that the run-time representation is less efficient. There's
still an awkward type annotation near the end, I need to investigate. As a
side-note, if we require the type of the adoptees to be exclusive, then we can
statically guarantee that an element cannot be adopted twice, which is neat (see
"take2_").