Fix grid objective check

In order to simplify the logic here (and actually save us some memory), I've made it so that `safe_float` now returns `ints` for strings that don't have decimals (e.g., "1" instead "1.0").  It probably stand to renamed `safe_num` or something.

The main change I made here was switching to using the `dtype` of the `examples.classes` array, and fixing the logic for classifiers so that all classifiers are valid with "classification-only" objectives, regardless of the number/type of classes/labels.