Fixed somehow inverted operator == for shared/weak ptrs.
First pass at task unit tests. It -almost- works.

We have one fundamental issue to resolve. In state machine terms, we're
breaking the rtp step by queueing while a state is running.

In this case, the frame end state queues the frame begin state. The frame
begin state kicks off and queues all of the remaining states, including the
frame end state. Eventually, the frame end state is requeued while it's
still running!

Options:
1) Queue to a local object, then use that to queue to the scheduler
when the current task ends. This is a lot of copying.
2) Instead of batch ids, create actual batches. Inserting into a batch isn't
the same as queueing, and a state can be in multiple batches. When the current
batch ends, the next starts. This is similar to the O(1) scheduler, but I'm
not sure how to handle starvation as the current batch comes to an end.