1. A computer-implemented method to instrument a software program with automatic caching of results, the method comprising: at a cache point identifying component executed by a processor, receiving a software program including a chain of actions that have been written by an editing user; automatically identifying and inserting a cache point between actions in the chain of actions in the software program, the cache point indicating a location where data that has been gathered or computed can be cached to avoid subsequent gathering or computation of the same data, where the cache point has not been previously identified as a potential cache point and the cache point is configured to persist across a series of execution phases; at a program instrumenting component executed by the processor, instrumenting the software program to add caching logic that checks for and stores cached data at the location indicated by the cache point; storing the instrumented software program with the caching logic at the cache point in memory associated with the processor; at a program executing component executed by the processor, during a first execution phase, executing the instrumented software program in the virtual machine, wherein the execution of the instrumented software program includes: compiling the instrumented software program; and running a plurality of actions in the chain of actions, wherein a particular action in the plurality of actions includes caching data based on the caching logic in a cache results store; receiving an edit of the instrumented software program, the edit generated responsive to user input; and executing the edited software program during a second execution phase; wherein the execution of the edited software program includes: recompiling the edited software program; rerunning a portion of the plurality of actions in the edited software program; determining that the cached data corresponding to the particular action is to be retrieved from the cache results store rather than recomputed; in response to determining that the cached data is to be retrieved, skipping the particular action corresponding to the cached data in the plurality of actions and retrieving the cached data while rerunning the remainder of the plurality of actions.