Add subprojects; first pass at adding laws and tests.

This commit creates three sub-projects:

 - core: builds algebra.jar; contains type classes (and a few types)
 - std:  builds algebra-std.jar; contains sample instances
 - laws: builds algebra-laws.jar; contains laws and conformance tests

It also ports over the basic laws from Spire for:

 - signed
 - eq/order
 - groups
 - rings

Finally, it adds a very simple standard algebra instance for Int, and
runs the relevant laws tests on it.
So, the strategy we use is when the type is totally concrete, you mix it all in to reduce the number of objects needed.

But parameterized types, it is best to try to separate it out so that whatever someone may have on hand is "enough" for what they need.

Does this make sense? @tixxit and I ended up sort of stumbling onto this strategy, but it makes sense (to me at least).