Fancy networks

See docs/networks.md for details.

Unit tests pass, but I should write some more unit tests to test the expanded functionality before we merge this.
@lokI8 brought this up when I spoke with him earlier - the emtpy string is as much a reserved value as the string "admin" -- it's just an unintuitively named reserved value. He convinced me that we should just pick something like `"admin"` as the sentinel value.

This also means we need to check that value when creating projects, but that's true already (a user could call the api with an empty string for any parameter).