Generator for type class skeletons.

> scalaz-core/create-type-class Xxx Monad
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/Xxx.scala
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/syntax/XxxSyntax.scala

Currently assumes the classified type is of kind M[_].
Improve generator for type class skeletons.

The kind of the classified type can be specified (providing that it is * or *->*)

Example:

> scalaz-core/create-type-class Equal *
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/Equal.scala
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/syntax/EqualSyntax.scala
[success] Total time: 0 s, completed Sep 15, 2011 11:22:12 PM
> scalaz-core/create-type-class Semigroup *
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/Semigroup.scala
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/syntax/SemigroupSyntax.scala
[success] Total time: 0 s, completed Sep 15, 2011 11:22:18 PM
> scalaz-core/create-type-class Monoid * Semigroup
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/Monoid.scala
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/syntax/MonoidSyntax.scala
[success] Total time: 0 s, completed Sep 15, 2011 11:22:21 PM
> compile
[info] Compiling 6 Scala sources to /Users/jason/code/scalaz7-experimental/core/target/scala-2.9.1.final/classes...
[success] Total time: 7 s, completed Sep 15, 2011 11:23:04 PM
> scalaz-core/create-type-class Empty *->*
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/Empty.scala
[info] Writing /Users/jason/code/scalaz7-experimental/core/src/main/scala/scalaz/syntax/EmptySyntax.scala
[success] Total time: 0 s, completed Sep 15, 2011 11:23:34 PM
Fixed a problem with Promise.flatMap swallowing exceptions.
Don't use exceptions if you can help it.
Preserve chunks of content delimited by //// when regenerating type class sources.
SBT task `scalaz-core/create-all-type-classes` to create/update type class boilerplate.

This commit does not include the effect of running this.
Update existing typeclasses with `scalaz-core/create-all-type-classes`.

Renames `TypeClass#syntax` to `TypeClass#typeClassSyntax` to avoid using overriding. Maybe we can work on this more later.

A few inconsistencies were corrected along the way, e.g. MonadInstance should extends ApplicativeInstance, not BindInstance.

ToFunctorSyntax#LiftV is a temporary casualty, we need an additional `////` protected chunk in ToXxxSyntax.
Crank the machine to add a few new type classes.

Syntax and instances are missing.
Move Id to scalaz package object.
Rename ~> to NaturalTransformation; provide ~> as a type alias.
Restore ToFunctorSyntax#LiftV

Added a new chunk the the template.
Name all methods intended to be used as implicit views ToTarget[FromSource].
Add type class instances for FunctionN
added some ignore stuff
Generate a companion object for type classes.

Contains a method `apply` to obtain the type class implicitly.
Add copure to Copointed.
More work on FunctionN instances.

The implementation of TraverseInstance[Function0]#traverseImpl raises the question of how to use an Applicative instance when a Functor is called for.
Monoid generalizes Semigroup.
Semigroup and Monoid instance for Option.

The duplication between the two is concerning.
Inventing a slightly wacky opt-in inheritance to expose type class parents.

Self types somewhat minimise the boilerplate.

Type classes that generalize one or more parent type classes look like:

trait Applicative[F[_]] extends ApplicativeLike[F] {
  self : ApplyInstance[F] with PointedInstance[F] =>

  implicit val applicativeParents: ApplyInstance[F] with PointedInstance[F] = this
}

The member `applicativeParents` exposes parent type classes, for example:

    def traverseImpl[G[_]: Applicative, A, B](fa: () => A)(f: (A) => G[B]): G[() => B] = {
      val G = Applicative[G]
      import G.applicativeSyntax._

      // This import enables implicitly[Functor[G]]
      //
      // implicitly[Applicative[G]] still unambiguously refers to the context bound.
      import G.applicativeParents

      f(fa()).map((b: B) => () => b)
    }
None is the rightful zero for the Option Monoid.