tap: change the way to determine tap name unambiguously and the on-disk representation

This commit also supports "-" and "_" in names of user and repository.