JS rendering for workflow using Executors and Monad stacks

Looking for feedback/help with this.

It's pretty much there, minus a couple of things:
1. Need an implementation of `fail` in `JSExecutor`, probably by adding `EitherT` to the stack. I gave that a couple of tries and got stuck. Could use some help, assuming you agree on that approach, @jdegoes.
2. `JSExecutor` is not fully implemented for `MapReduce`. I'm working on it.
3. The types got pretty ugly in here and I could really use some help restoring some sanity. I'm hoping there are simpler ways to write some of these, or else maybe it just makes sense to go all in on the type lambdas.

I'll add some notes to the code where I have specific questions.

Any other comments welcomed.
I usually define helper functions because Scala's has no higher-kinded type inference. There are a few possibilities: 

1. You want to lift `F` into `EitherF`;
2. You want to lift `EitherF` into `M`.
3. And the composition of (1) and (2), i.e. lifting `F` into `M`.

So 3 helper functions takes care of it, something like:

```scala
def succeed[A](a: A): M[A] = write(EitherT(\/- (a)))
def fail[A](e: EvaluationError): M[A] = write(EitherT(-\/ (e))
def write[A](a: EitherF[A]): M[A] = WriterT(...)
```