Make extension more... extendable.

Add support for extending sub-sub-classes of _extendable classes, move
more of the logic from _extendable into the vanilla extend() method, and
add specs for all of it.