Exact Algorithms for Single-Machine Scheduling with Time Windows and Precedence Constraints