AHRS API/Interface refactor

Goals:
- to allow multiple different AHRS algos running at the same time
- no more dependencies on the global imu or ahrs_aligner structs in the ahrs implementation

The idea is that every ahrs has it's own unique names for functions and implementation struct and that you then can e.g. register an ahrs algorithm by passing pointers to to the propagate/update functions.

Question if we also want to support running multiple instances of the same AHRS algorithm in the same process (meaning compiled into same blob)? That would also require to pass the AHRS implementation struct to it's own update functions. But you start to get to a point where you implement C++ features in C, but in a less readable way...

This pull request is mainly to discuss options on concrete examples, ahrs_mlkf so far... not done for the other ahrs algos.