title: Scalaz iteratees: "Lifting" `EnumeratorT` to match `IterateeT` for a "bigger" monad
body: <p>If I have an <code>EnumeratorT</code> and a corresponding <code>IterateeT</code> I can run them together:</p>
  
  <pre><code>val en: EnumeratorT[String, Task] = EnumeratorT.enumList(List("a", "b", "c"))
  val it: IterateeT[String, Task, Int] = IterateeT.length
  
  (it &amp;= en).run : Task[Int]
  </code></pre>
  
  <p>If the enumerator monad is "bigger" than the iteratee monad, I can use <code>up</code> or, more generally, <code>Hoist</code> to "lift" the iteratee to match:</p>
  
  <pre><code>val en: EnumeratorT[String, Task] = ...
  val it: IterateeT[String, Id, Int] = ...
  
  val liftedIt = IterateeT.IterateeTMonadTrans[String].hoist(
    implicitly[Task |&gt;=| Id]).apply(it)
  (liftedIt &amp;= en).run: Task[Int]
  </code></pre>
  
  <p>But what do I do when the iteratee monad is "bigger" than the enumerator monad?</p>
  
  <pre><code>val en: EnumeratorT[String, Id] = ...
  val it: IterateeT[String, Task, Int] = ...
  
  it &amp;= ???
  </code></pre>
  
  <p>There doesn't seem to be a <code>Hoist</code> instance for <code>EnumeratorT</code>, nor any obvious "lift" method.</p>