Revamp Rectangle construction, use emplace functions, clean return types

Several changes to only allow two constructors for Rectangle: one that takes the position parameters and one that takes the position and size parameters.

push_back and push_front functions have been changed in favor of emplace_back and emplace_front when the push_* functions were pushing to the collection a temporary object that had just been created.

I also removed the const qualifications from the return types of functions that were returning built-in integer types. The compilers ignore such qualifications (per the standard), making them useless.