state_id data type
Future library to represent pure computations

Since the whole system is imperative, futures are run protecting
the global state, and the final state is also saved to let the user
freely chain futures.

For now their evaluation semantics is the one of lazy_t, but should be
possible to execute them in a separate OCaml runtime (eventually in
parallel).
Searchable stack data structure

It is like Stack but one can search without popping
Dag data structure

This is a very simple, only growing, Dag structure with per node
optional info and per edge info
Vcs data structure (Git inspired builder for Dag)

Given named branches, one can incrementally build a Dag using
Git like commands
Side effect free implementation of admit (Isabelle's oracle)

new Axiom in Logic.v,  proof_admitted : False.

admit now simply cases proof_admitted and does
not create a new Axiom in the environment.
State Transaction Machine

The process_transaction function adds a new edge to the Dag without
executing the transaction (when possible).

The observe id function runs the transactions necessary to reach to the
state id.  Transaction being on a merged branch are not executed but
stored into a future.

The finish function calls observe on the tip of the current branch.

Imperative modifications to the environment made by some tactics are
now explicitly declared by the tactic and modeled as let-in/beta-redexes
at the root of the proof term. An example is the abstract tactic.

This is the work described in the Coq Workshop 2012 paper.
theories/ hacked to make STM compile the whole library

Problems:
1) Ltac _parsing_ seems to trigger globalization, so we force the
   execution of the previous states by hand in the scripts with 'Join.'
2) Some tactic declarations have been reworded putting Local in front
   (not really needed)
3) An occurrence of ring seems to diverge, commented out.
4) Detection of Module with parameters (a command that must be executed
   immediately (classification as VtNow) since it changes the grammar
   is incomplete, explitic 'Join.' added instead
TODO.Paral + test.v
Coqide ported to STM

Main changes for STM:
1) protocol changed to carry edit/state ids
2) colouring reflects the actual status of every span (evaluated or not)
3) button to force the evaluation of the whole buffer
4) cmd_stack and backtracking completely changed to use state numbers
   instead of counting sentences
Support Proof General