A general-purpose data assimilation and forecasting system