The Elements of Computing Systems - Building a Modern Computer from First Principles