Reasoning about Rational Agents: A Review