Fix KerasMetricCallback prediction with generate() and inference of column names
A number of fixes to the Keras metric callback based on testing with the notebooks. I think I've caught all the implementation differences, and in most cases we can now pass exactly the same `compute_metrics` function to this callback as to `Trainer`.

I'm still in the process of overhauling the notebooks, so I might need to make a few more tweaks to this PR if I encounter any other problems!
_The documentation is not available anymore as the PR was closed or merged._