enhance(InvokeWaitUtils): Provide invokeIn...() and waitFor...() methods

_This PR adds the class `InvokeWaitUtils` that handles concurrency. It provides the groundwork for a more flexible setup and cleanup process for JavaFX fixtures._

The class `InvokeWaitUtils` contains the static methods:

- `invokeInThread(Callable<Void> | Runnable)`:<br>Invokes given callable or runnable in a new `Thread` and returns a `Future` that is set on finish or error.
- `invokeInApplicationThread(Callable<Void> | Runnable)`:<br>Invokes given callable or runnable in the `JavaFX Application Thread` and returns a `Future` that is set on finish or error.
- `waitFor(Future, long, TimeUnit)`:<br>Waits for given future to be set, or times out with `TimeoutException`.
- `waitFor(Callable<Boolean>, long, TimeUnit)`:<br>Waits for given condition to return `true`,  or times out with `TimeoutException`.
- `waitFor(ObservableBooleanValue, long, TimeUnit)`:<br>Waits for given observable value to return `true`,  or times out with `TimeoutException`.
- `waitForApplicationThread(int)`:<br>Waits the given times for `JavaFX Application Thread`.
- `sleep(long, TimeUnit)`:<br>Sleeps the given duration.

Examples:

~~~java
// Launch the Toolkit:
waitFor(invokeInThread(launchToolkitCallable), 30, SECONDS);

// Setup a Stage:
waitFor(invokeInApplicationThread(() -> setupStageConsumer(stage)), 30, SECONDS);

// Setup Stages, Scenes and Nodes:
waitFor(invokeInApplicationThread(setupCallable), 30, SECONDS);

// Start an Application that calls stage.show():
invokeInApplicationThread(() -> startApplicationConsumer(stage));
waitFor(stage.showingProperty(), 30, SECONDS);

// Start an Application that requires another condition.
invokeInApplicationThread(() -> startApplicationConsumer(stage));
waitFor(booleanCallable, 30, SECONDS);
~~~