Various render task refactors to help with upcoming caching changes.
* request_render_task() now returns a handle to a render task cache entry, rather than an allocated texture cache item. This is more in line with how normal texture cache request work. * Allows the allocation to happen later in the frame (for example if the exact render task size is not yet known). * Allows storing more information about a cached render task than what a texture cache item stores (for example, a specific blend mode that is required). * Allows batching code to cheaply look up a cached render task entry by using a freelist instead of a hashmap. This will become more important as we start to cache render tasks that have larger / more complex cache keys. * Add an extra type parameter to freelist.rs to allow using a custom marker type. This avoids rustc errors related to Send or Sync not being implemented on free list handles with !Send or !Sync phantom data types. * Allow the size of a render task to be set to None initially, if it is not known. * Add a new render task call (prepare_for_render) which can be used by render tasks to prepare tasks that rely on glyphs and/or images in the resource cache to be resolved first. This can also be used to set the size of a render task before render target allocation, if the render task size is not known during initial visibility pass.