refactored Opt class
refactor Conditional, renaming mapf, mapr, mapfr

mapf -> vmap
mapr -> flatMap

also add documentation
refactor: move Conditional.combine, flatten, toList to ConditionalLib

these are utility functions and should not have the same name as
functions on conditional objects
refactoring: renamed vfold operations in ConditionalLib
refactor: rename Choice.feature to condition and inFeature to ctx
refactor: change implementation of mapCombination to flatMap/map combination
refactor: clean up explode/zip/mapCombination methods

simplify and unify implementations
refactor: restore equals and cleanup in testing code
remove ConditionalLib.insert

it wasn't used and it's purpose is hard to decipher from
its description or implementation
refactor: final cleanup in ConditionalLib

* deprecated additional functions, replaced with more natural direct alternatives
* added documentation
update version to 0.4.0

this version will combine several major changes that might not
all be backward compatible. many old methods in ConditionalLib
are now deprecated