Refactoring

Some refactoring, with a bit more doc.

I didn't know which part was considered public API or not so I did my changes as to not break any API. The only thing that may pose problem is the function definition in process.py, I now directly have the defaults functions in the arguments defaults, so if someone just pass None to theses functions it won't work anymore.