move hypgeom code to its own module, +improvements and docs