Rely on buffered channels instead of wait locks for throttling

Closes #7