Let tables handle arbitrary objects

Specifically to support a clean syntax for tables built from Hashes,
this commit enables you to use the normal clean `column` and `row`
syntax like this:

```ruby
table_for foo: 1, bar: 2 do
  column :foo
  column :bar
end
```

Note that `dom_id_for`, which `attributes_table_for` was already using
but `table_for` wasn't, is definied by Arbre.
so much for DRY code

Lots of view helper-related code by changing the behavior of
`call_method_or_proc_on`, so I had to revert it.

The plan is to combine `table_for` and `attributes_table_for` so they
use the same code, so at least we'll have less duplication because of
that.

Note that I changed the collection-detecting code to do literally what
we expect, instead of trying to class-detect every possible variation.
This was necessary to keep collection decorators working.
Merge pull request #2812 from seanlinsley/feature/1713-support_arbitrary_objects_for_tables

Let tables handle arbitrary objects