Task execution api

@hiwaylon @joshmarshall @cbefus 

Can somebody take a look at this? I know it's a big change, but there was a lot of back-and-forth in my head before I got the API really nailed down.