Code reorganization

* Split solve.c up into several, smaller files
* Added more documentation on the finite element solvers