Reduce memory footprint of actors, change strategies to be more efficient & safe for actors and async calculations

Proposed changes and additions:
1. Reduce 40 bytes per actor instance by replacing `val` by `def` in `toEffect` definition.
2. Improve an executor strategies that baked by FJ pools to be more efficient in submitting tasks for execution.
3. Add `def apply(a: => Unit): Unit` to strategies to be yet more efficient with actors (or other message-passing systems).
4. Improvements of default error handiling in actors: fix `InterruptedException` to be rethown properly, add sending of uncatched errors to `UncaughtExceptionHandler` of thread that by default prints stack trace. 
5. Add creation on demand for default strategy, thread factory and executor services to minimize usage of resources.
6. Use default thread factory that creates deamon threads for the naive strategy.
7. Add `DefaultLIFOForkJoinPool` and `DefaultFIFOForkJoinPool` as more suitable thread pool (for async calculations & actors accordingy) than `DefaultExecutorService` backed by `ThreadPoolExecutor`.
8. Add `Executor(execService: ExecutorService, batchSize: Long): Strategy` to allow fine tuning of trade off between fairness and throughput of actors.
9. Reduce default batch size of actors from 1024 to 10 that allows to improve fairness of predefined strategies.
10. Fix the sequential strategy to run actors without stack overflow.
11. Improve the naive strategy to minimize forking of new threads in message handing loop of actors.
12. Improve tests for actors and strategies. 
lzy val? probably