First cut at ReactiveJS port. Note: Only works in Firefox at the moment due to use of Javascript 1.7 'let' and lambda/arrows features.