code: function generateEndpointFactories( routesByNamespace ) {
  
  	return objectReduce( routesByNamespace, ( namespaces, routeDefinitions, namespace ) => {
  
  		// Create
  		namespaces[ namespace ] = objectReduce( routeDefinitions, ( handlers, routeDef, resource ) => {
  
  			const handlerSpec = createResourceHandlerSpec( routeDef, resource );
  
  			const EndpointRequest = createEndpointRequest( handlerSpec, resource, namespace );
  
  			// "handler" object is now fully prepared; create the factory method that
  			// will instantiate and return a handler instance
  			handlers[ resource ] = function( options ) {
  				return new EndpointRequest( {
  					...this._options,
  					...options,
  				} );
  			};
  
  			// Expose the constructor as a property on the factory function, so that
  			// auto-generated endpoint request constructors may be further customized
  			// when needed
  			handlers[ resource ].Ctor = EndpointRequest;
  
  			return handlers;
  		}, {} );
  
  		return namespaces;
  	}, {} );
  }
docs: Given an array of route definitions and a specific namespace for those routes,
  recurse through the node tree representing all possible routes within the
  provided namespace to define path value setters (and corresponding property
  validators) for all possible variants of each resource's API endpoints.
  
  @method generate
  @param {string} namespace         The namespace string for these routes
  @param {object} routesByNamespace A dictionary of namespace - route definition
  object pairs as generated from buildRouteTree,
  where each route definition object is a dictionary
  keyed by route definition strings
  @returns {object} A dictionary of endpoint request handler factories