Sources f rom Coursera Scala course. More descriptions, explanations, refactored to be IDE agnostic, add maven support