(PUP-2563) Remove 1.8.7 support

General comments for reviewers:
* Despite the ticket wording this is really "remove anything < 1.9.3". The
  distinction only comes up in a handful of commits, mostly those removing
  code where the original committer already assumed < 1.9.3 was equivalent
  to 1.8.7.
* I proceeded primarily by searching the code base for either 'RUBY_VERSION' or
  '1.8' and then doing the appropriate thing, ranging from comment tweaks to
  minor refactors.
* There are still some references to 1.8 in the code where it made sense to
  me for context (or in one case in interface/action.rb where disentangling
  the 1.8 impl was going to lead to too much of a rewrite to be worth it).
* I didn't make any effort to scrub 1.8-ish idioms generically - that seemed
  beyond the scope of the current ticket and too unbounded. I imagine those sort
  of changes will be picked up by refactoring as we go forward.
* That said, in some cases there were broken windows I fixed because I was there.
* I'll add comments to a couple individual commits where I had questions.
I made the original comment because I *thought* that `select!` was an extract-and-modify operation (i.e. that results in two arrays: a new one with what matched the select, and the modified original with what didn't) but it isn't.  And I don't *think* there is such an operation. But I'd love to find out there is and I just missed it.