Various improvements to the Dolfin's data structures

* Introduce the concept of Primal and Dual vectors (not yet implemented for numpy data types)
* Make BFGS work with non-standard inner products
* Use a partially refined mesh in the optimal Poisson test case