ivory lang: introduce IvoryZeroVal typeclass, refactor IvoryZero instances

Previously, IvoryZero of the numeric types depended on the Num constraint
for the generalized "fromIntegral 0" value. This made it impossible to derive
IvoryZero for any newtypes on numbers that did not also have Num.

So, we now use an IvoryZeroVal class for all zeroable numeric types, which
can be safely derived by newtypes.
ivory bitdata: BitRep and newtypes now derive IvoryStore, IvoryInit, IvoryZeroVal

this permits the user to store bitdata in refs (and create uninitialized local refs)
which is generally safe. using an uninitialized ref is unsafe, as usual