• 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.
    gw3583 committed Apr 16, 2018