remove inheritance from HListFunc to Func

Refactors `HListFunc` to be a stand-alone trait by moving type parameter `T < TCList` to type variable `L`.

This allows `HNilFunc` and `HConsFunc` to have common trait so they can be folded from a `List[Int]`. See the test:

```scala
  "hlistfunc" in {
    val test = List(1, 2, 3).:\(AppFunc.HNil[Int, Int]: HListFunc[scalaz.Applicative, Int, Int]) ({ (n, acc) => 
      AppFuncU { (x: Int) => (Some(x + n): Option[Int]) } :: acc })
    val result = test.runA(1)
    result match {
      case Some(x: Int) :: Some(y: Int) :: Some(z: Int) :: HNil =>
        { x must be_===(2) } and
        { y must be_===(3) } and
        { z must be_===(4) }   
    }
  }
```

I discovered that the above was not possible with the old implementation when I implemented [sudoku solver](http://eed3si9n.com/sudoku-using-func):

```scala
scala> emptyCells.foldLeft[HListFunc[TCList, Applicative, Cell, List[Vector[Int]]]](AppFunc.HNil[Cell, List[Vector[Int]]]) { (acc, cell) => Solver.cellMachine(cell.pos, game.sqrtn) :: acc }
<console>:22: error: type mismatch;
 found   : scalaz.typelevel.HListFunc[scalaz.typelevel.TCNil,scalaz.Applicative,com.eed3si9n.sudoku.Cell,List[Vector[Int]]]
 required: scalaz.typelevel.HListFunc[scalaz.typelevel.TCList,scalaz.Applicative,com.eed3si9n.sudoku.Cell,List[Vector[Int]]]
Note: scalaz.typelevel.TCNil <: scalaz.typelevel.TCList, but trait HListFunc is invariant in type T.
You may wish to define T as +T instead. (SLS 4.5)
              emptyCells.foldLeft[HListFunc[TCList, Applicative, Cell, List[Vector[Int]]]](AppFunc.HNil[Cell, List[Vector[Int]]]) { (acc, cell) => Solver.cellMachine(cell.pos, game.sqrtn) :: acc }
                                                                                                       ^
```