iBistro: A Learning Environment for Knowledge Construction in Distributed Software Engineering Courses