mpu6000: fixed internal/external mixup in pointers

Thanks to Emile for spotting this!
hmc5883: periodically check the config and range registers

this copes with I2C comms errors causing the range or config registers
to become corrupted, leading to bad reading. This is easily
reproducible with a 1.3m I2C cable in the same run of cable as a GPS
UART cable. The error happens every half hour or so.
Merge remote-tracking branch 'diydrones/master'