Change CodeInspection Public API to expose providers and allow deregistering providers.

- Changes getProvidersForPath to be public - allows extensions to query providers for custom linting.
- Adds getProviders to allow extensions to get all providers.
- Adds deregister to allow extensions to remove a provider when the extension provides a provider with the same functionality.

Although this changes the public API, it does not change any existing methods - it just expands upon them. For this reason, I think that this should not produce any backwards compatibility issues.

Some discussion on this topic has been done here: MiguelCastillo/Brackets-InteractiveLinter#44.

/cc @MiguelCastillo
i updated the previous comment several times. sorry for any confusion that may have caused but I wanted to get it right.  We need to use `_.cloneDeep` so that copies are made of the arrays.  Hopefully we don't need that function though.