Add a CPU implementation of ILU0 preconditioner.

This will help in giving us an illustration of how ILU preconditioner
can potentially help in performance and saving memory. Next step
is to implement higher level of ILU and hopefully combine it with
SPIKE.
Add implementation of ILUT(p, tau) factorization

This allows us to study how ILUT(p, tau) factorization performs. In
the next step we might want to see how SPIKE can be combined with
ILUT factorization.
Seek for possibilities of better performance of ILUT factorization.
Wrap up ILUT factorization as a function.
Add prototype of ILUTP factorization for a more robust preconditioner.

Also change some details in implementation for performance issue.
Submit another version of ILUTP factorization

Including a bug fix and a different method in pivot selection.
A small change in sweeping phase
Wrap up code in functions.

These include incomplete LUs, sparse sweeps and CPU version dense
sweeps.
Add OpenMP support to sweeps.

The threshold of number of partitions of doing CPU/GPU sweeps has
also been changed from one to four.
Merge branch 'feature/ILU0' into develop