Refactoring code and pushing preconditioners into separate files and to allow users to write their own.  Resolves #2.

Squashed commit of the following:

commit 5c1400cb0c45e03065977cc1fe09abcd098064a6
Author: Zhengyun Zhang <zhengyun@smart.mit.edu>
Date:   Tue Dec 2 16:46:27 2014 +0800

    fixing bugs and changing the sample code to try different preconditioning

commit da023032245d74629a4cc6f6f58b3241e0a8df7f
Author: Zhengyun Zhang <zhengyun@smart.mit.edu>
Date:   Tue Dec 2 16:32:13 2014 +0800

    refactoring code to move all data that is invariant across iterations into a "consts" struct and allow callbacks and preconditioners to access it

commit fa85bd6b95445deb6f05409e9fac0c2d2bb40c38
Author: Zhengyun Zhang <zhengyun@smart.mit.edu>
Date:   Tue Dec 2 16:09:31 2014 +0800

    adding preconditioners

commit 43972c26db248d7b9a79f1d372d2742a1c0f06be
Author: Zhengyun Zhang <zhengyun@smart.mit.edu>
Date:   Tue Dec 2 16:06:50 2014 +0800

    Moving w2 into the state

commit ae0c5ab4a8c3878ef5bb07f6d63bf8c506b7f791
Author: Zhengyun Zhang <zhengyun@smart.mit.edu>
Date:   Tue Dec 2 15:50:47 2014 +0800

    refactoring code so that all the preconditioning calculations are together; this requires extra storage of the delta in y