Lossless tags

Replace `@@` to be:

    private[scalaz] type Tagged[A, T] = {type Tag = T; type Self = A}
    type @@[T, Tag] = Tagged[Tag]

Usage is:

    scala> Tags.MinVal.unwrap(Tags.MinVal.lossless(1) |+| Tags.MinVal.lossless(2))
    res0: Int = 1

    scala> Tags.MinVal.lossless(1) * Tags.MinVal.lossless(2)
    <console>:14: error: value * is not a member of scalaz.@@[Int,scalaz.Tags.MinVal]
                  Tags.MinVal.lossless(1) * Tags.MinVal.lossless(2)
                                                        ^