Fixed intersection type in 18.

- isArray had to be modified (lost precision). Can be restored
  when TCing under inconsistent environment is fixed.
Replaced the intersection type in 19 with Top and use the dynamic type checks.
Still not avoiding the the assumption of an array type for the field retrieved
from the "on" object.
Top cannot be used in Array check, cause adding a case for that will skew the
rest of the cases.