Serialize dev startup

Adds a lock directory that must be held before the virtualenv can be
created and dependencies installed. This prevents a concurrency bug
where if dependencies are installed for multiple virtualenvs at the same
time they can hang.