As far as I can tell, removeDotSegments will never return a leading '.'. Plus this example does not have a refererName.

Here's my way to look at it: The output of normalize will be sent to locate() where we basically prefix baseURL. So 'd/e/f' becomes either
   http://example.org/d/e/f'
or
  http://example.org/./d/e/f'
These are canonically the same url right? In other words, both
   System.normalize('d/e/f') 
and 
   System.normalize('./d/e/f') 
must result in the same module: they must have the same string outputs.

To accomplish this I was prefixing with ./. I think that is too hard. It makes more sense to pass all of the normalize results through canonicalize().  Then none of the examples will result in strings starting with ./.

Does this sound right?