adt4j - Algebraic Data Types for Java