Add Bytecode test (ASM-based) to partest.

This commit introduces a new kind of test `Bytecode` that allows
one to inspect bytecode generated for given piece of Scala code.

The bytecode inspection is achieved by inspection of ASM trees.
See the included example for details.

NOTE: This commit does not introduce a new category of pratest tests.
Bytecode tests should be run in `jvm` category of partest tests.

Specific list of changes:
  * Add BytecodeTest that contains common utilities to partest
  * Add asm to classpath when compiling partest. That's not a
    new dependency as it's being already done for javac task
    we were running while compiling partest.
  * Add an example test that shows how to count null checks in
    given method.
refactor: prepare null check redundancy analysis

this commit doesn't change any behavior
analyze extractor type test, drop redundant null check

pattern matching on case classes where the scrutinee
is not known to be a subclass of the pattern type
would result in code like:

```
if (x1.isInstanceOf[Foo]) {
  val x2 = x1.asInstanceOf[Foo]
  if (x2 != null) {
    ...
  }
}
```

this wastes byte code on the redundant null check
with this patch, it's no longer emitted when
previous type tests imply the variable cannot be null
don't store subpats bound to underscore

also, tweak fix in place for SI-5158 to appease SI-6941
don't store mutable fields from scala.* as we can assume
these classes are well-behaved and do not mutate their
case class fields
skip test if static type <:< expected *primitive value class*
SI-6686 don't load unit as arg for matchEnd label

also, drop valdef unused in flatMapCond's block