AP_L1_Control: Addition of library for geometry calculations required for L1 Control.

calc_L1_circ: generates L1 reference point on circle
calc_L1_line: generates L1 reference point on line
Plane: Integration of L1_Control for straight line and circular navigation.  L1_Control is a non-linear navigation controller that does not require tuning and provides curved path following.

To enable L1_Control for loiter and straight line following add the following to your APM_Config.h:
#define L1_CONTROL ENABLED
#define L1_REFERENCE_LENGTH [length]
where [length] is a reference length in meters.  The smaller the value the higher gain.  Try 2*groundspeed.
L1_Control: Added support for turn direction. 1 for clockwise, -1 for counter-clockwise
AP_AHRS: added wind_correct_bearing() and groundspeed_vector()

these are very useful for navigation libraries
L1_Control: change code into a C++ object

this isolates the L1 navigation code from the rest of the code. Thanks
to Brandon for the original code, and thanks to Paul for help in
converting this code to C++
AP_Math: added Vector2f.angle()

useful for calculating the vector in polar coordinates
Plane: adapt L1 controller to use new object form
AP_AHRS: fixed functions that need to be virtual

functions overridden in a child class need to be marked virtual, or
you get the parent class function
Addition of a first order complementary filter to AP_AHRS::groundspeed_vector
I have been unable to compile due to problems with compiling this branch
AP_AHRS:compile errors on complementary filter patch

Addition of a complementary filter to estimation of the ground velocity vector for use by the L1-nav
AP_AHRS::groundspeed_vector

Cleanup and parameter adjustment
AP_L1_Control

Modified straight line and circle L1 guidance algorithms to enable:

1) Explicit control of tracking loop period and damping which removes previous
   variation in period with speed and fixed damping ratio
2) Explicit control of track capture angle (now set to 45 degrees by default)
3) Removal of restriction on loiter radius being greater than L1 distance

The circle(loiter) control is now a L1 and PD hybrid utilising L1 for waypoint capture and PD control for circle tracking.
L1_Control: fixed parameter info

this was causing a hang on startup