Update rational.hpp

Access to the numerator and denominator is unnecessarily inefficient when using rational with multiprecision types (ie where copying is relatively expensive), this change returns const-references to numerator and denominator.  In all other respects existing code should be uneffected by this change.