Improve memory usage when checking for NaNs

To resolve issue #1053 by @cancan101.

> Currently, this appears in numerous places: np.any(np.isnan(X)). This requires creating a large array of booleans matching the shape of X. More efficient would be: np.isnan(np.min(X)).

> See: http://stackoverflow.com/questions/6736590/fast-check-for-nan-in-numpy
Oddly enough this was wrong from the get go -- there are two checks to ensure `plp` contains no nans, and two checks to ensure `olo` contains no infs.