Rename boxed type classes from *Value to Boxed*

This has a couple benefits:

- Using these names is more clear in the native function decl. For
  example, 'boxed-exact-integer' is unambiguously boxed while
  'exact-integer-value' could be interpreted as referring to a bare
  integer.

- BoxedDatum is no longer a special case. The base type has been renamed
  from 'boxedDatum' to 'datum' and naturally kept the 'Boxed' prefix
Support NFI boxed types besides boxed-datum

This allows the parameter types and return types of NFI functions to
specify the exact boxed type they're expecting. This has a few
advantages:

- The standard library doesn't need to perform its own type assertions
  on parameters

- The compiler can elide type assertions when it knows the type of the
  value being passed to the native function

- The compiler has more type information about the values being returned
  from native functions