SI-8285 use correct kind of map for quasiquote positions

Previously mutable.ListMap was used with assumption that it preserved
order of inserted elements (but it doesn't). Surprisingly logic that
assumed ordered elements worked mosly fine on unordered ones. I guess
two bugs can cancel each other out.
SI-8333 can't use modifiers if class is in a block

Was caused by the ordering of parser cases. Need to check for definition
first due to the fact that modifiers unquote looks like identifier from
parser point of view.
SI-8275 allow to directly extract block contents of the case def

Due to the fact that blocks in cases are implicit one might expect to be
able to extract its contents with `..$`.
Fix block construction/deconstruction asymmetry

Deconstruction of blocks in case clauses uncovered asymmetry between
construction and deconstruction of blocks:

   tree match { case cq"$pat => ..$cases" => cq"$pat => ..$cases" }

Such an identity-like transformation used to produce an incorrect tree due
to the fact that zero-element block was mistakingly associated with
empty tree. Such association was used as a solution to block flatenning:

   val ab = q"a; b"
   q"..$ab; c"       // ==> q"a; b; c"

   val a = q"a"
   q"..$a; c"        // ==> q"a; c"

   val empty = q""
   q"..$empty; c"    // ==> q"c"

This commit changes meaning of zero-element block to a be a synthetic unit
instead. This is consistent with parsing of `{}`, cases, ifs and
non-abstract empty-bodied methods. A local tweak to block flattenning is
used to flatten empty tree as empty list instead.
Merge pull request #3591 from densh/si/8275

SI-8275 allow to directly extract block contents of the case def
Merge pull request #3593 from densh/si/8285

SI-8285 use correct kind of map for quasiquote positions
Merge pull request #3596 from densh/si/8333

SI-8333 can't use modifiers if class is in a block