def at *positions
      positions = preprocess_positions(*positions)
      validate_positions(*positions)
      if positions.is_a? Integer
        key(positions)
      else
        self.class.new positions.map(&method(:key))
      end
    end
Takes positional values and returns subset of the self
capturing the indexes at mentioned positions
@param positions [Array<Integer>] positional values
@return [object] index object
@example
idx = Daru::Index.new [:a, :b, :c]
idx.at 0, 1
# => #<Daru::Index(2): {a, b}>