Minor changes

| Q                         | R
| ------------------------- | -------------------------------------------
| Correction de bugs ?      | oui
| Nouvelle Fonctionnalité ? | non
| Tickets concernés         | 

J'ai essayé de regarder [ZEP-05](http://zestedesavoir.com/forums/sujet/676/zep-05-refonte-du-traitement-markdown-pour-lexport/) mais il faut lire le code de `tutorial/{models,views}.py`, donc j'ai essayé de m'y familiariser en le modifiant un peu.

Cette série de patch factorise le code pour qu'il soit plus lisible. Je pense qu'il y a encore beaucoup à faire pour retirer les redondances, mais il y a des irrégularités dans le code (par exemple certains remplissages de chapitre fournissent une clé `get_absolute_url{,_online}`, d'autres non) qui rendent cela plus difficile à moins de régulariser le comportement. Les patches joints essaient de préserver absolument le comportement existant (sauf bug manifeste), et n'essaient donc pas de factoriser ça.

Je n'ai pas du tout testé le code, puisque je n'ai pas encore réussi à installer ZdS en local (issue #1350).

Je n'ai pas trouvé comment avoir en Python un argument qui soit nommé mais pas optionnel (donc sans valeur par défaut). Il est indispensable qu'un argument booléen soit nommé pour des raisons de clarté du code, mais ici `utf8` ne devrait pas être considéré comme un argument optionnel. En effet, je ne comprends pas (et je n'ai pas obtenu pour l'instant de réponse à cette question) pourquoi le code existant utilisait parfois `utf8=False` et parfois `utf8=True`, sans raison apparente pour la différence. Je soupçonne qu'il s'agit d'un bug et que `utf8` devrait toujours être à `True` (et alors on pourrait simplement supprimer cet argument), sauf éventuellement dans certains cas qu'il faudrait expliquer et documenter. Il est donc important que ce réglage soit très explicitement visible au lieu d'appel.