modern JS inheritance done right