Abstract cross-covariance calculations

Ideally this lets update and update! have one method
for all (or almost all) Kalman filters while the calculation of the cross-covariances and residuals is all that
varies between the filters
Dispatch predict! and update! on the abstract Kalman filter type
Add abstraction to BasicExtendedKalmanFilter