Table/issue 2868

This finishes up @cherti's original PR at #3055 by rebasing on master and updating to work on master.  I also fixed a few bugs and reformatted the code a bit.  After I submit this PR I'm probably going to rebase again to collapse down some of @cherti's original commits, but will still make sure they get credit.
Sorry, I guess I didn't read the original problem description in #2868 carefully, but I disagree with @astrofrog that the exception is incorrect.

The column is, by definition, the correct type since it the thing that must be formatted. In this case the format string has a value that does not make sense for the column.  For instance in the test when passing a value of `"fail"` then it fails.  Everything was the right type but the value of the format string is wrong.

The original example showing `"%9.5f" % 'a'` raising a `TypeError` is not a perfect analogy to `t['a'].format = "%9.5f"`.  In the former example there is some ambiguity about what is wrong, but in the latter case of a Table column it is clearly the format that has the wrong value, not the column having the wrong type.