Reversible execution and visualization of programs with LEONARDO