I removed the code to break the array into chunks whose size is a
power of two.  This didn't make any significant difference in the
speed of the algorithm, but it does considerably simplify the code. 
The method 'findBannedWords' goes away, and 'run' becomes

  def run()
    if @words.empty?
      []
    else
      findBanned(@words)
    end
  end

(And the comments on the other two methods about the size of their
input being a power of two also go away.)

Wayne