Don't call i_index() from i_interpret1() any longer.
Implement operator functions for light-weight objects.

The following C++ style operators can be defined:

    + - * / % & ^ | < > <= >= << >> ~ ++ -- [] []= [..]

operator - can be used for both unary and binary operators, operator []
is used for index, operator []= is used for indexed assignment, and
operator [..] is used for the range operator.  The functions should
return a light-weight object, a truth value (for comparison operators)
or nothing (for operator []=).

The functions can be called using `operator + (B)' in object A,
`call_other(A, "+", B)' if the operator function is not static, or
`A + B' if A is a light-weight object.  The latter can also be used
to call static functions, allowing operator functions to be called in
light-weight objects that are uncallable in the master object that
defines them.

When called as `A + B', B can be any value other than nil.  If A is not
a light-weight object or does not have operator + defined, and A is not
a value type for which addition is predefined, an error will result.