aijcusparse: ICC/Cholesky preconditioners

This is a patch for ICC/Cholesky preconditioners on GPUs for the
aijcusparse(aijcusp) class. One uses ICC by loading an upper triangular
matrix into the cusparse class, and then setting the symmetry option,
i.e.

ierr = MatCreateSeqAIJCUSPARSE(comm,n,m,PETSC_NULL,num_entries_per_row,&A);CHKERRQ(ierr);
ierr = MatSetOption(A,MAT_SYMMETRIC,PETSC_TRUE);

This contains contains both the organization and implementation of the
preconditioner. The solves are done under the hood in the txpetscgpu
package. Currently, the factorization is done in the aij/seq/aijfact.c
routines. aijcusparse.cu makes scoping calls to these methods. Then, the
matrix is rebuilt into a form that is palatable for the GPU. This is
done in the method MatSeqAIJCUSPARSEBuildICCTriMatrices.

[Jed] Formatting and 'static' cleanup
MatSeqAIJCUSPARSE: white space, style issues, static and extern functions

Conflicts:
	src/mat/impls/aij/seq/seqcusparse/aijcusparse.cu

[Jed] Touch-up to conform to style guide
vscatcusp : fixed compiler warnings

This class had several variables that were not being used
in the method VecScatterInitializeForGPU. These are now
fixed.
ksp tests: new tests for ksp algorithms using aijcusparse methods

A new test, ex43-aijcusparse.c, is added to the src/ksp/ksp/examples/tests
directory. This example tests various combinations of the aijcusparse class
including different storage formats and both the ilu and icc
preconditioners. Results are committed for the K20c architecture.
However tests on the 2070 architecture give identical behaviour as
expected. For ICC preconditioning (runex43-aijcusparse_2), this test now
runs a much smaller matrix (shallow_water1) and it converges fast. The
symmetric shallow_water1 matrix is stored in upper triangular form.
The aijcusparse class handles symmetry properly by informing the class
the matrix is symmetric as demonstrated in the test. New results are
being committed here.

Finally another target is added for the ex10 example in tutorials
subdirectory of the ksp examples. This target ensures the ex10 class
is test with the aijcusparse class when built with txpetscpgu.
aijcusparse : fixed MatGetFactor and other small issues in this class

Fixed MatGetFactor_seqaij_cusparse to have a more standard set of
of function calls (similar to aij/seq/umfpack or superlu) for
setting up the factorization. In particular, I replaced the scoping
call to MatGetFactor_seqaij_petsc with the sequence MatCreate,
MatSetSizes, MatSetType, and MatXXXSetPreallocation. With these changes,
all tests that use aijcusparse class pass in optimized and debug builds.
Moreover, all memory leaks have been removed.

Additional small fixes to this class include the removal
of unnecessary PETSC_CUDA_EXTERN_C_BEGIN/END and poor use of
PETSC_COMM_WORLD in this file. Lastly, a few missing error checks
around several PETSc API method calls for symmetry/hermitian tests
were added.
txpetscgpu: upgrade to version 0.1.0
MatSeqAIJCUSPARSE: make private functions static
PetscThreadCommFinalizePackage now properly resets PetscThreadCommRegisterAllCalled to false
changed an example to test multiple calls to PetsciNitialize/Finalzie
Revert bad example of multiple calls to PetscInitialize
PetscBT: Add PetscBTLookupClear()
PetscInitialize/TS: test multiple calls in (bad) convergnce study
TS: fix definition of diffusive stability limit for Brusselator tests
Merge branch 'barry/fix-multiple-calls-to-petscinitialize'

* barry/fix-multiple-calls-to-petscinitialize:
  PetscInitialize/TS: test multiple calls in (bad) convergnce study
  Revert bad example of multiple calls to PetscInitialize
  PetscThreadCommFinalizePackage now properly resets PetscThreadCommRegisterAllCalled to false changed an example to test multiple calls to PetsciNitialize/Finalzie
Merged in dalcinl/petscbt-lookupclear (pull request #26)

PetscBT: Add PetscBTLookupClear()
Merge branch 'jed/aijcusparse-icc'

* jed/aijcusparse-icc:
  MatSeqAIJCUSPARSE: make private functions static
  txpetscgpu: upgrade to version 0.1.0
  aijcusparse : fixed MatGetFactor and other small issues in this class
  ksp tests: new tests for ksp algorithms using aijcusparse methods
  vscatcusp : fixed compiler warnings
  MatSeqAIJCUSPARSE: white space, style issues, static and extern functions
  aijcusparse: ICC/Cholesky preconditioners

Conflicts:
	src/mat/impls/aij/seq/seqcusparse/aijcusparse.cu (PetscObjectComposeFunction usage)