An Introduction to Constraint-Based Temporal Reasoning