Lots of refactoring. and new results on permutations and list containment.

The refactoring includes:
* Use infix notations for the various list relations
* More consistent naming
* Put lemmas on one line whenever possible
* Change proofs into one-liners when possible
* Make better use of the "Implicit Types" command
* Improve the order of the list module by placing all definitions at the start,
  then the proofs, and finally the tactics.

Besides, there is some new machinery for proofs by reflection on lists. It is
used for a decision procedure for permutations and list containment.
Extend the axiomatic semantics for expressions.

It now includes a framing environment that is shared for function calls. It can
be used to keep track of invariants of shared data structures by all function
calls in an expression.

Besides, an equational theory for memories that behave equivalently with
respect to disjointness has been added. This make reasoning about disjoint
memories much easier, and is used to implement a faster and more reliable
tactic to automatically solve properties about disjoint memories involving
unions.