Concurrency and Concurrent Constraint Programming