don't force variables to be atoms
support expressions in map keys
improve spawn support