Mise en place d'un cache

Lors de l'analyse d'une chanson `toto.sg` (avec plasTeX), si aucun fichier de cache `toto.sg.cache` n'est présent (ou si `toto.sg` a changé, ou si `toto.sg.cache` a été généré par une ancienne version de songbook), l'analyse est faite, et une version simplifiée de l'objet Song est enregistrée dans `toto.sg.cache`. Au contraire, si ce fichier `toto.sg.cache` est correcte, l'analyse plasTeX n'est pas faite, et c'est la version enregistrée dans le cache qui est utilisée.

Quelques statistiques (avec l'ensemble des chansons de patacrep-data) :

- Branche master (sans le cache) :

  ```console
  $ time songbook data/books/songbook.sb --steps=tex
  [patacrep.build] INFO: Building 'songbook.tex'…
  real    0m41.100s
  user    0m40.892s
  sys     0m0.136s
  ```

- Première exécution avec le cache (donc toutes les chansons doivent être cachées). C'est plus long, mais pas énormément.

  ```console
  $ time songbook data/books/songbook.sb --steps=tex
  [patacrep.build] INFO: Building 'songbook.tex'…
  real    0m47.636s
  user    0m41.100s
  sys     0m0.432s
  ```

- Seconde exécution avec le cache : aucune chanson n'est analysée à nouveau, le cache est utilisé à chaque fois. Comme on le voit, il y a un gain de temps assez important.

  ```console
  $ time songbook data/books/songbook.sb --steps=tex
  [patacrep.build] INFO: Building 'songbook.tex'…
  real    0m0.836s
  user    0m0.692s
  sys     0m0.140s
  ```

La branche n'est pas prête à être mergée : il reste quelques warnings disgracieux.

Ça pourra être particulièrement utile pour patanet.
Je crois qu'il est conseille de faire plutot
```Python
try:
    import cPickle as pickle
except ImportError:
    import pickle
```