proof-of-work based blockchain explained with golang

Yet another “blockchain explained” article, I know, I really thought about if releasing it or not, but you know, you only understand what you can explain clearly, so I hope I'll be able to explain proof of work and blockchain as clearly as it is clear in my mind. The originality of this post is that I'll try to make those concepts clear through pieces of code extensively explained so it doesn't feel like a theoretical expose where you get the idea without the taste.