Add lexical arrays and hashes to the AST.
Refactor Type::dump() into Type::to_string().
Add array and hash types.
implement typed Array/Hash variables.

When declared type matches the variable kind, everything is fine, when
there is a mismatch current behaviour is:

    typed Int @foo -> Array[Int]
    typed Int %foo -> Hash[Int]
    typed Array[...] $foo/%foo -> error
    typed Hash[...] $foo/@foo -> error

Reference type is still missing.