changes strand's handling of empty and errors from the underlying executor
changes strand's handling of empty and errors from the underlying executor

Summary:
after discussion with Lewis, change the contract for empty and error signals from the underlying executor in the strand implementation.

error will forward the error to items in the queue and then reschedule for any remaining items

done will forward the empty signal to items in the queue and then reschedule for any remaining items.

These changes should prevent infinite scheduling loops and allow the underlying executor to push back against the items being submitted to the strand.

Reviewed By: lewissbaker

Differential Revision: D14955343

fbshipit-source-id: 926109594d7aed1766d868b705c84a6ed664e2f3

facebook/folly,facebook/folly,facebook/folly,facebook/folly,facebook/folly