Remove redundant asInstanceOf for liftable

Previous encoding of Liftables which had universe passed in
as a parameter required a cast to solve path-dependant
madness problems:

  trait OldLiftable[T] { def apply(u: Universe, v: T): u.Tree }

In this case compiler wasn't smart enough to find out that

  liftFoo(universe, foo)

returns the same type of tree we were working with (universe.Tree)
and we had to cast to make it work:

  liftFoo(universe, foo).asInstanceOf[universe.Tree]

Now this cast is redundant as universe is not a parameter of
Liftable's apply.
Lift Some, None, Nil, Left, Right not just supertypes

Previously leaf concrete types were not lifted which
could have caused weird problems when types is too
precise:

  val s1 = Some(2)
  q"$s1" // used to fail
Give better names to UnliftHelper1 and UnliftHelper2

Previous ones were inscrutable but thankfully @xeno_by
helped me out to find better alternatives.;
Test edge cases of literal lifting

Previously in some corner situation proper Liftable instance
might not have been resolved.

In particular q"${true}" and q"${""}" used to fail.
Merge pull request #3373 from densh/topic/std-liftable-refinement

A few minor changes to standard liftable instances and liftable support