Use an explicit DataNamespace mixin for Data/Resource objects

Currently there is only the "Voice" namespace used in the public gem. References to this namespace are hard coded in the client (for resolving `client.phone_numbers` type queries) and path building (to deal with nested resources). If we want to add extra namespaces, especially internally, it requires manually updating these two hard-coded lists. By making Data namespaces explicit by using a mixin to track descendants, we have an implicit registry of defined namespaces. It also allows for future behavior changes, such as specifying path components in the DataNamespace directly instead of in the Resource via `namespace` call.