Documentation and tests

I've added a substantial amount of documentation describing both the high-level and low-level features of the code. The code is formatted as Scaladoc and can be built into HTML using "sbt doc". Please do look over the docs for errors; in particular review the high-level description of the algorithm in package.scala.

I've also added a number of tests, in /src/test/scala/infcalcs. These tests were mainly for me to convince myself that I knew what the different pieces of code were doing, so they certainly don't test all the ways in which the code could have errors! Many of the algorithms use randomization, so it's hard to define "expected" output for these methods. On the other hand, the type system would catch obvious errors like incorrect return types. In many types I looked at the dimensionality of various inputs and outputs to see if the number of entries in an output list matched what would be expected based on the number of entries in an input list/lists. Hopefully these tests will also prove useful in any future refactoring of the code.

The tests can be run using "sbt test".