Add a facility to read source models in commonlib

See https://bugs.launchpad.net/oq-engine/+bug/1390348.
This also fixes https://bugs.launchpad.net/oq-engine/+bug/1267424.
The tests are green: https://ci.openquake.org/job/zdevel_oq-commonlib/185
There is no `:yields:` syntax, so I will use `:returns:`