Describir: Towards a Theory of Parallel Programming