Add Array and Map to self-evaluating types.

Refactor self-evaluation into a trait which is matched against in the
evaller.