Fix #4296: Add assign property for expop/expon
We add an `assign` property for `$expop` and `$expon` so that they can only
be set to a (non-negative) integer.
We also add a new `:type` option for `defmvar` that allows an
arbitrary Lisp type to be specified. This `:type` option then
declaims the variable to have the given type. This replaces the
`fixnum`, `boolean`, `string`, and `flonum` options for `defmvar`.
Since we now declare the type of `$expop` and `$expon`, we need to
update `enprog` that was initializing these to NIL and then setting
them to 0. We need to initialize them to 0 to satisfy the
declaration.