[Pipeline] Refactor the content builder by harry-cpp · Pull Request #8988 · MonoGame/MonoGame

@harry-cpp

- ContentCollection: Add ability for specifying multiple outputs for the same asset input
- ContentCollection: Make include / exclude only do operations on current content root
- ContentCollection: Modify outputPath function to expect a path without extension in case of build action
- Parameters: Make Parameters a class so they can both be read from CLI and afterwards modified in code more easily
- Parameters: Add ability to rebuild content
- Cache: Make content cache track content based on produced outputs instead of inputs
- Cache: Mark ContentFileCache as internal and make an IContentFileCache that the IContentCache is working with
- Cache: Track output file times in case of external modifications
- Cache: Sanitize
- Builder: Add ability for multiple dependencies of the same asset to have separate properties (more refactoring on this is coming so that we don't waste space)
- Builder: Sanitize passed pathing to ContentCollection
- Builder: Automatically append .xnb to output path in case of build action
- Builder: Remove GetDefaultOutputPath and GetDefaultCopyPath as they now no longer to any modifications