Throws if range is too large for 'random.uniform'

This fixes issue #2138 by checking that the range (i.e. high - low) is finite before invoking `rk_uniform`.

A test case was added to ensure valid ranges do not throw, but invalid ranges do.
this converts python float to double and back to python float, might be better to use npy_isfinite to work directly on the doubles