Enforce namespace unique constraints

This is the update to actually enable namespace support.

At the moment, I pass a namespace as a query parameter in order to support namespace scoping on the v1beta urls.  Once v1beta3 lands, I will modify to pass namespace in the path.  Note the client libraries were modified to make this easy to do, so should be a trivial change once ready.

I broke the commits into logical sections to improve readability.
@smarterclayton No.  It's possible in the future that we will have a node structure in etcd where a directory and a node exist at the same depth in the hierarchy, so we need to process all non-directory sibling nodes.

For example:

/key/registry/foo/bar <- Node.Dir=false
/key/registry/foo/abc <- Node.Dir=true
/key/registry/foo/abc/def <- Node.Dir = false

calling List nodes recursively on /key/registry/foo would need to return {bar,def}