This class is used to hold resources and their mechanism to delete them on demand. In order to allow for some reuse (e.g. components), the Release call supports a "soft" release by marking them unused in order to be potentially re-used down the line. At the end of the generate, a call to ReleaseIfUnused will serve to finally cleanup what is not needed anymore.