Don't read from options directly

Instead, options are exposed internally through a getter.
This allows global options to be updated and used by existing instances.
Add tests for extension/type detection
Add 'use' method and global for registering loaders
Move extension and loader tests to queue suite
Don't reference Promise option directly
Rename use to register
Remove loaders; Add mocks for tests
Use xtend instead of custom extend function
Remove global config; rename register to registerLoader

Merge instance config with defaults
Merge branch 'extract-loaders'

* extract-loaders:
  Remove global config; rename register to registerLoader
  Use xtend instead of custom extend function
  Remove loaders; Add mocks for tests
  Rename use to register
  Don't reference Promise option directly
  Move extension and loader tests to queue suite
  Add 'use' method and global for registering loaders
  Add tests for extension/type detection
  Don't read from options directly