Add Fortran wrappers for Pre/PostSolve in PC Shell.
Add Fortran wrapper for ApplyBA in PC Shell.
Add Fortran wrapper for View in PC Shell.
Merge branch 'fix-scattertype' into fix-scatterinitcusp

The bug to be fixed in this branch requires us to be able to query
whether a given VecScatter is sequential or parallel. The
fix-scattertype branch contains new code specifically designed for this
task.
Check whether VecScatter is sequential in VecScatterInitializeForGPU.
Short circuit for zero matrices in MatMul_SeqAIJCUSP and MatMulAdd_SeqAIJCUSP.

As of cusp 0.4.0 the case of zero matrices is not handled well: cusp
produces segfaults.  Adding checks to guard against this case.
Fix host memory registration logic.

The logic for when to register host memory is still pretty complicated
and should be simplified.
Trying to fix the cudaHostRegister/cudaHostUnregister logic.
Replace cudaMemcpyAsync with cudaMemcpy.

Also page locked host memory registration.
Adding a simple run of ex7 with ILU in subdomains.

Conflicts:
	src/ksp/ksp/examples/tutorials/makefile
Ensure that host array is allocated.

This commit fixes a bug where a null pointer is returned when
((Vec_Seq*)x->data)->array == 0 and x->valid_GPU_array ==
PETSC_CUSP_UNALLOCATED.  This situation arises for vectors generated
with VecDuplicate_SeqCUSP.
Adding a bjacobi test with mpiaijcusp matrices.
Adding a parallel test of bjacobi with mpiaijcusp matrices.
Checking that the host pointer is valid should be sufficient.

Because the GPU array gets invalidated later in this function.
Use cusp work vectors in bjacobi if necessary.
Add methods for acquiring local vector views to _VecOps.

Conflicts:
	include/petsc-private/vecimpl.h
Adding implementations VecGetLocalVector_SeqCUSP and VecRestoreLocalVector_SeqCUSP.
Bug fix in VecGetLocalVector and VecGetLocalVectorRead.
Use GetLocalVector and RestoreLocalVector in PCApply_BJacobi_Singleblock.
Need to check whether vector has a non-null data ptr before dereferencing it.