Factor out method lookup

A special case of method application used a string to lookup a method in
an existing object, and would always assume that the method existed in
the object. Method lookup is now factored out into its own method in the
interpreter, which removes this potentially fallacious assumption and
making apply more robust for the runtime implementation.
Allow override of variables in super objects

Variables are now treated the same as methods when attached to objects,
and can be requested through super when they are overridden. Undefined
variables now appear as regular variables, and some inconsistent use of
names and the prebuilt Unknown variable have been tidied up.