feat #791 add async-aware `beforeClass` and `afterClass` in TestCase

Apart from long-existing `setUp` and `tearDown` that are executed before
each test method, adds other JUnit-inspired `beforeClass` and `afterClass`
which make it possible to execute heavy methods only once.

The main added value is the possibility to do the things asynchronously
here (otherwise it could have been done in `$constructor`). Could be
useful e.g. to load a big JSON in `beforeClass` and then write normal sync
tests, instead of forcing the developer to load the JSON and continue in
the callback function.

The `beforeClass` and `afterClass` automatically infer if they're called
in asynchronous or synchronous way based on the number of arguments
received (0=sync, 1=async), to reduce the boilerplate code.