Standardise variable and type access

Variables and types were implemented as synchronous methods, which
exposes their definition when they should be indistinguishable from
methods. They now appear exactly as methods in both the object they are
defined in and the local scope, but the scope access for values that are
known to be variables shortcuts through the 'value' property.