Allow specifying bcs to apply with vector assembly

This makes

    b = assemble(L, bcs)

equivalent to

    b = assemble(L)
    for bc in bcs:
        bc.apply(L)