3.3.1
bug fix: chunk yielded an empty batch

3.3.0
added async/parallel context foreach

3.2.0
added to_dict
refactoring to group and join based on to_dict

3.1.0
added unzip

3.0.0
added AsyncContext and ParallelContext
replaced reduce2 with reduce optional arg
added ext functions single, first, chunk
removed quicklog
moved shape_eval to dedicated proj
bug fix: fixed composable state issue which prevented result unpacking
bug fix: prepending a composable to existing composition missing __g invocation
performance improvement to Composable, optimizing for __call__
Composable's __call__ greatly exceeded the cost of native invocations due to unnecessary intermediate invocations (to other Composables) which
required additional logic around packing/unpacking results/args. This version improves performance by rethinking the purpose of Composable
as an immutable container of compositions, rather than pointers to f and g. Consequently, composition of void funcs was removed.

2.0.1
Identity functions are no longer created using Composable directly, instead the .id extension method was added.
Experimental function .select was moved to an experimental branch
License was changed from MIT to GPLv3
Unit tests were cleaned up, focusing more on primitives and less on the complex data samples
Improvements were made to the .shape function, correcting the display of tuples, and added a notation for nullable properties in the format "propertyName?". As this makes it more clear when a dictionary or array property is nullable.
.flatmapid() was removed, instead flatmap() with no parameters should be used. Several functions now support the same defaulting identity function.
Added .zip and .flatnest extensions
