The handling of strand control signals was a bit complex and unclear. I've tried to clear it up:
 - Renamed signals to be clearer/more consistent
 - Added a bunch of assertions to catch invalid signal combinations
 - Restructured comments to be clearer