work around Array#slice! bug
In a few places, the end of an events array is sliced using Array#slice! passing the initial element (or offset from the end) followed by a second parameter which is the length of the array.
The documentation for Array#slice! tells us that the second argument should be the length of the slice, and not the end index of the slice; but normally Ruby will cap the length of the slice to the number of elements left in the array.
However, there's a bug in Ruby 3.0.0--3.0.2 (https://bugs.ruby-lang.org/issues/18138) that skips the sanity check on length and causes illegal memory access and occasional segfaults. This change fixes the arguments to use a Range object whose end is used as the final index of the slice as I believe the author originally intended, and prevent triggering this bug in Array#slice!
Fixes #60