don't crash at zoom just < 200%

to address bug # 10025
be more punctilious about type casting
process only half width & height in closeup mode

No need to calculate the whole 100% roi if are viewing at 200%. This
allows the viewing area in closeup mode to go all the way to outer
edges of the image without trying to calculate beyond the image edge.
fix zoom jumping at edges

This reverses a change from
darktable-org/darktable@54f0f75c23f80b037715c4a47be58c9118698a1f. The
zoom jumping that commit fixed is now solved by the prior commit,
which only calculates the viewable rectangle in closeup mode.
keep w/in image edge when switch out of closeup

otherwise it would be possible in darkroom mode to:

- turn off flip iop
- set to 200% zoom
- pan to bottom edge
- switch back to 100% with Alt-1
- see a black border at the bottom of the image view
check zoom bounds in dt_dev_process_image_job()

Check zoom bounds here every time rather than in zoom_key_accel().
This now catches the case of toggling from 200% to 100% at image edge,
but also a case when switching between aspect ratios or changing image
orientation.

Note that now dt_dev_check_zoom_bounds() gets called more times than
necessary -- either unnecessarily in dt_dev_process_image_job() or
gets checked in other functions as well as in
dt_dev_process_image_job().
more selective about when to check zoom bounds

Only check in dt_dev_process_image_job() if changed to a different
image or changed pipeline. Restore separate check if toggle closeup.
Merge pull request #643 from dtorop/zoom-crash-garbage

eliminate crash & garbage on 2x > zoom > 1x
dt_exif_read(): check stat() return value

Coverity CID 1087782
RawSpeed: RawDecoder::decodeUncompressed(): cast before multiplying

Coverity CID 1230646
dt_noiseprofile_interpolate(): use float division