dividing the spec into first-order and high-order

Instead of insisting for implementers to give complex high-order
implementations and insisting that readers shouldn't interpret this
complex code as indicative of how simple the first-order version would
have looked like, let's just ask everyone to implement the same
first-order version.