Add analytic jacobians
Description
Right now, we are using numerical jacobians to solve the problem. From initial profiling, this is one of the causes for slowness in the program.
Proposal
First implement the missing jacobians, then add a template switch to decide whether the class uses analytical or numerical one.
How to test the implementation?
Analytical and numerical jacobian have to give the same results up to some precision: it's very unlikely that residuals and jacobian coincide on a wrong solution for the two options. Hence, a new test can be added comparing the two cases.