refine block and applied/typeapplied splicing/matching semantics

1. blocks now match single term-level expressions to account for
   automatic block elimination. E.g.

   val q"{ ..$stats }" = q"foo"

   will match into stats = List(q"foo"). This is useful to uniformly
   deal with blocks on term level.

2. blocks in quasiquotes collapse into single expressions

3. Applied and TypeApplied now have constructors too which helps
   to unify matching and extraction in quasiquote reifier

4. TypeApplied now matches AppliedTypeTree too

5. Add Syntactic prefix to Applied and TypeApplied
add support for function type splicing and scaladot finer grained reification
first-class early def splicing and extraction support
add support for function expression splicing and extraction
make the postfixOps warning go away
transform combination of head & isEmpty into pattern
move NoMods and NoFlags optimization out into base reifier
rename earlyDef into ensureEarlyDef and eliminate option allocations
use isHole instead of holeMap.contains in quasiquote parser
rename tstart0 into tstart1
unify handling of references to scala members for functions and tuples
add clarifying comments to ScalaDot reification and explicit flags check
refactor out common code between syntactic valdef and vardef
streamline implementation of annotation splicing
allow splicing annotations with type arguments and multiple arg lists

Syntax spec mislead me to believe that annotation can't have type
parameters or multiple argument lists... I guess the lesson here is
don't trust the spec.
move quasiquotes into unhygienic submodule of universe

1. current quasiquotes are now moved into universe.unhygienic and
   require one more extra import to be used
2. each interpolator is defined in their own implicit class to
   make it possible to import just one flavor of the q, tq, pq, cq
3. there is a shim class left for sake of compatibility with current
   starr's definitions. It can be removed after next starr update that
   includes this commit.