Disable timer for devices that fail at runtime

Previously the timer would attempt to call the device-specific
implementation of any device compiled for regardless of what the
`RuntimeDeviceTracker` says or if it fails. This caused problems when a
particular device (such as CUDA) was compiled for but run in a system
where the runtime was not available.

Fix this problem by (1) first checking to see if the device is enabled
in the `RuntimeDeviceTracker` before running and (2) if an exception is
thrown catch it and disable the device in the `RuntimeDeviceTracker`.
28 jobs for timer-bad-device in 0 seconds
latest