change: self usages in static usages for extendability reasons

I changed the usages of self into static, new Money into static too,
changed the access modifier of private methods to protected final in
Money class to make them callable in the inherited class.
Change the the access modifier of the class property amount and currency
from private to protected for the same reason.