Fix bug in QM.reduce

- need to skip first element as current value when used as initial
Improve specs for QM.fold and QM.reduce

- using zero gave mis-leading results in QM.reduce which masked defect
Add QM.compact
Add QM.firstAssigned
Fix QM.reduce to work with sparse arrays

- uses QM.firstAssigned if first element does not have assigned value
Add qm-try and qm-option modules

- based on Scala's Try and Option types