Fix block construction/deconstruction asymmetry

Deconstruction of blocks in case classes 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.