Detect circular dependencies

Throw an exception whenever a circular dependency in module
requirement order is detected.

The CommonJS specification does allow for circular dependencies,
however, since they can result in partial exports we chose not to fail
silently when they are detected.