Add function Results.Why to construct a Why
Clarify that Why::Base#promote is private
Rename parameter to binary operations as 'other'

See https://github.com/bbatsov/ruby-style-guide#syntax
Whoops, actually #promote needs to be protected rather than private
Consolidate rules of promotion into Why::Base#promote
Simplify merging Why::Named values
Move attr_reader macro above method definitions

See https://github.com/bbatsov/ruby-style-guide#classes--modules
Extract classes in module Why to seperate files
Clarify that Results.Why() is a module function
(cometic: rename string keys to symbols in a test to silence RubyMine inspection)