split out a Project class into project.py.
added Project.absurl().
moved hashed_id() into a new obi module.
no more hard-coding of dist dir.