Isolate pool creates and starts a given number of isolates (passed to constructor)
and schedules execution of single jobs (see PooledJob) or puts and keeps
their instacnes of PooledInstance allowing to comunicate with those.
Job is a one-time object that allows to schedule a single unit of computation,
run it on one of the isolates and return back the result. Jobs do not persist between calls.
Pooled instances persist in isolates, can store own state and respond to a
number of calls.
Subclass this type in order to define data transfered to isalte pool
and logic executed upon object being transfered to external isolate ([init method)
One-off operation to be queued and executed in isolate pool
Whatever fields are dedfined in the instance will be passed to isolate.
The generic type E determines the return type of the job.
Be considerate of Dart's rule defining what types can cross isolate bounaries, i.e. you will
have challenges with objects that wrap native resources (e.g. fil handles).
You may reffer to Dart's SendPort.send for details on the limitations.