Add support for arbitrary, valid decimal numbers

This is basicall PR #140 with some additional cleanup/commits. PR #140 got rebased with master and the commits squashed and I was having trouble cherry-picking some additional commits onto it so I'm just submitting a new PR. Also, the squash meant I lost authorship on some commits, which I'd prefer to keep if possible.

Aside from the stuff in #140, this adds:

  * bug fix in 0 handling of JsonDecimal,
  * change `to*` methods to `tuncateTo*` to reflect behaviour,
  * change `safe*` methods to `to*` methods,
  * make `asJsonDecimal` private due to safety issues around NaN and Infinity,
  * prisms for Byte, Short, Long, BigInt, and BigDecimal, and
  * add a bunch of ScalaDoc.

@seanparsons I believe this should take care of your concerns regarding the numeric conversions.

I merged in the the latest commit I could find in master that *compiled* and not master itself. I think this should merge cleanly with master now.