partition-with -> gather-by

Re-implement and rename partition-with as gather-by. Base the
implementation on Clojure's partition-by (which by definition is more
idiomatic Clojure than my Racket-ish implementation).

In fact, one could implement both partition-by and gather-by as thin
wrappers over a core function that takes two predicates -- one to use
for the first element in each partition, and one to take-while the
remaining elements for each partition. Given that, partition-by supplies
f for both, whereas gather-by supplies f and (complement f).