Factor shared bits into ValueReactor.

This also adds onChange(At) to OptValue, which is good and proper.