changed to use union instead of virtual function
added more functions for array & hash
some template magic to get the type conversions working
added operator==
refactor the TypeMap to another header
added generic As()
added non-const generic As(). use As() to implement AsXXX()
improved templates