Auto-differentiable data assimilation: Co-learning of states, dynamics, and filtering algorithms