Allow array or hash syntax for partial index conditions

This is the newer version of #13353, based off of the latest master. It allows you to replace these migrations:

```ruby
add_index :foos, :user_id, unique: true, where: "status IN (0, 1)"
```

With this:

```ruby
add_index :foos, :user_id, unique: true, where: { status: [1, 2] }
```

It understands anything that `ActiveRecord::Sanitization.sanitize_sql_for_conditions` accepts.
Agreed, I'd rather not change it without a full understanding of why it's currently acting that way. Let's add a third optional parameter. Maybe call it `original_table_name`?