Moving Forward: A Review of Autonomous Driving Software and Hardware Systems