In register_project, we currently ignore duplicate violations. However, to protect from the case that two different projects have the same name, we should also check the URI. That is, when a project already exists with the specified name, but its URI is different (or NULL vs. not NULL), we should die then, too. This will minimize the chances of two different projects claiming the same project name.
Disallow duplicate project URIs.
Projects with a URI now must always have the same URI when deploying or an
exception will be thrown. If a project has no URI and its name is already
registered with a URI, this also dies (and vice versa).