Got rid of a lot of unnecessary extra calls

Things like *_ptr.get(); are simplified to simply *_ptr; Initializing of
std::unique_ptr's are no longer double. The VarStatement got replaced
with the ExpressionStatement as that made slightly more sense. And this
uses proper inheritance for calling the proper method now instead of
the rather ugly casting that was going on there.