Managing Coordination and Cooperation in Distributed Software Processes: the GENESIS Environment