The traveling salesman problem with pickup and delivery: polyhedral results and a branch-and-cut algorithm