The Design and Experimental Analysis of Algorithms for Temporal Reasoning