Use `image.astype(dtype)` instead of `dtype(image)`

This PR addresses Issue #476, which is actually a NumPy bug but we can work around it with a trivial syntax change.

Passes all tests on my Mac, and the two versions profile no differently.

Someone familiar with this algorithm should look at line 181; that's the only remaining `dtype()` call, which reads `result *= dtype(dtype_range[dtype][1])`.  I'm not confident in naively dropping that argument into `.astype()`, and because it merely scales `result` I don't think it would matter even if it did drop back to a float.