Accept Function not Dat in _la_solve

Additionally, document arguments better.
Add Matrix class

A thin wrapper around a PyOP2 Mat that remembers the bilinear form it
was assembled from.
Use Matrix not Mat for assembled bilinear forms
Apply boundary conditions correctly in _la_solve case

Now that the assembled bilinear form remembers where it came from, we
can correctly apply strong boundary conditions.
Add test of preassembled solve with boundary conditions