Test empty aggregate/function
Small refactoring
Add test for assignment in match
Allow maps in match clauses

Permitting maps in match clauses allows the programmer to control the
assignment of relationships should they desire. For example, to create
the match clause

  MATCH q = n-[:KNOWS]-p

the programmer may write

  (match {:q [:n [:KNOWS] :p]})

However, by allowing this syntax there is a potential to generate
queries that behave unexpectedly. For instance the match expression

  (match {:q [:n [:KNOWS] :p]}
         [:p [:KNOWS] :m])

might generate the match clause

  MATCH q = n-[:KNOWS]-p, p-[:KNOWS]-m

If you are interested in returning `q`, this is a problem.

To prevent this from happening unbound matches are automatically
assigned a generated identifer. So the above clause becomes something
similar to

  MATCH q = n-[:KNOWS]-p, A1837 = p-[:KNOWS]-m
Merge branch 'match'