Constraint-based Temporal Reasoning with Preferences