Assembled bcs

I don't know what happened with #58.  But I think I have addressed all the comments there, and also David's suggestion to reassemble if it turns out we got some new boundary conditions after actually assembling the matrix.

So for the following:

````python
A = assemble(a)
bc1.apply(A)
A.assemble() # or some other thing that forces assembly
bc2.apply(A)

solve(A, ...) # this uses bc1 and bc2
````

Also bcs passed as a kwarg in a solve /override/ what was previously set on the matrix

````python

A = assemble(a)
bc1.apply(A)
solve(A, ..., bcs=[bc2]) # this uses just bc2.
````