Updated error messages per pull request discussion

Refactored some in the process. I realized that there were a number of
situations in which Vim will give "Using List as a string" or the like
as an error, including `:echo 'asdf' . []` and `:let @a=[]`, and so
decided to introduce a structure that supported that, because I was
noticing a pattern of having to convert numbers to strings for several
commands. This should also happen, strictly, in function calls, but
exists(1) (which returns 0) hardly seems valuable to me.
Implemented `:echo []` and `:echo {}`

I was trying to test the errors I put in in the last commit and couldn't
get them to come up, so I went ahead and improved the list and
dictionary support every so slightly so I could finish the testing.
Besides, it's probably something we would have wanted to do eventually
anyway.