Add some more types to vm_value; change vm_value's type's type.

vm_value::type is now int32_t and located after the actual value in
memory. The type change is to permit user-defined types (how the VM
will handle these isn't decided -- right now, they'll just yield
undefined values because the conversion rules don't permit them). The
latter is just to avoid putting padding bytes between the value and
type, though it will likely result in padding bytes at the end of
values. Still, that just leaves room for other data to be appended.

A value's layout in memory shouldn't be relied on by anything using
Rusalka, so it's not important outside Rusalka's internals.

----

Removed a bunch of redundant code for handling comparisons in the
process, since there's now equatable, ordered, and incomparable
value types.

- Equatable: equatable values can only be tested for equality (== and
  !=). They do not have a concept of relative ordering.

- Ordered: ordered values can be compared relative to each other. For
  example, a SIGNED value can be tested for whether it's greater than
  or less than another value. A DATA value, on the other hand, cannot.
  Only arithmetic values (i.e., SIGNED, UNSIGNED, and FLOAT) are
  ordered -- further support for this in custom types is likely going
  to happen as part of the VM rather than in vm_value, since vm_value
  doesn't have the context necessary to determine ordering for anything
  other than arithmetic types. These can also be referred to as
  comparable values.

- Incomparable: values of this type cannot be compared. So, doing a
  logical comparison always yields a negative result (e.g., == is
  false, != is true). UNDEFINED- and ERROR-typed values are currently
  the only incomparable types, though any TYPE with a value less than
  UNSIGNED is considered incomparable.

----

vm_value now has constructors for creating a value with a specific
type. Ideally, this is how values with user-defined types will be
constructed.
Update operator << (ostream&, vm_value).

Now writes '(#TYPE, VALUE)'. Unsigned and non-arithmetic values are
written as hex, others are written as decimal.