Reactive, reproducible, collaborative: computational notebooks evolve