Get class and its supertypes' properties recursively, duplications and loops are handled (Which should be caught by compiler)