Kenz/alarms refactor v3

This adds support for error codes, giving us granularity in the system alarms. Two use-cases are provided, one for manual control and one for the sanity check. 

The functions that check if the error code before setting it (e.g. setManualControlErrorCode) could be moved to the alarms.c in system library. 

This is outside the scope of the pull request, but all alarms in general could also be improved by setting a throttle timer on alarm updates so that the alarms can never hammer telemetry or the CPU.