All, I've ported the University of Minnesota 15 state EKF to Arduino:

Beware, it's currently very beta and a work in progress. This filter was designed by Adhika Lie at the University of Minnesota and, the PowerPC and BeagleBone Black versions, are the primary navigation filter used for research there since 2012 for the quaternion version of the filter (there had been an Euler version of the filter used earlier). This filter loosely integrates IMU and GPS measurements. The IMU is propagated in a time update to estimate the inertial state (corrected IMU measurements, orientation, LLA position, NED velocity). When GPS measurements are available, they are used as a measurement update to correct the inertial state and estimate the IMU biases.

Known current issues with this port of the filter are:
1. Accelerometer and gyro biases are not being updated
2. Set methods are needed for setting the sensor characteristics
3. Get methods are needed for covariance in order to measure the filter covariance
4. Versions of this filter use magnetometer for increased heading accuracy. These should be incorporated.

This algorithm has been ported from it's original source:

Also, much of the recent work on the filter in a BeagleBone Black environment, including adding magnetometers, has been done by Curt Olson: