I've been on the fence on that. ``_allocate_state`` is called by the ``Workflow`` constructor and is not meant to be public, whereas it is beneficial to seed the ``Workflow`` with ``initialize_state``, such as during testing. However, I'm not sure if that seeding has benefit outside of testing, in which case, it should be private.

``_allocate_state`` is intended to literally allocate, or construct, the state object. During testing for the sequence iterators, there was a 50% reduction in runtime when recreating a ``dict`` to house the sequence data vs. preallocating a single ``dict`` and just updating the values associated. A similar approach is taken here given that the original driving force for this object was operating on large volumes of sequence.

The downside to passing something in to ``__init__`` is that the derived workflow no longer knows how to actually construct itself such that ``state`` is valid for the associated methods and instead relies on the developer to have intimate knowledge of the methods when instantiating the object. Does that make sense?