using<R>  function 
 
Runs computation with a new Arena, and releases all allocations at the
end.
If the return value of computation is a Future, all allocations are
released when the future completes.
If the isolate is shut down, through Isolate.kill(), resources are not
cleaned up.
Implementation
R using<R>(
  R Function(Arena) computation, [
  Allocator wrappedAllocator = calloc,
]) {
  final arena = Arena(wrappedAllocator);
  var isAsync = false;
  try {
    final result = computation(arena);
    if (result is Future) {
      isAsync = true;
      return result.whenComplete(arena.releaseAll) as R;
    }
    return result;
  } finally {
    if (!isAsync) {
      arena.releaseAll();
    }
  }
}