Currently, the OpenMRS Person object supports a Set<PersonAddress>. However, all this allows you to do is specify that a person has multiple simultaneous addresses. There is no notion of whether the person has moved or has changed addresses over time.
To handle this, I propose adding nullable "startDate" and "endDate" properties to the PersonAddress object and to the data model, and to support these fields through the UI, Person object, and Services.
Ultimately, you should be able to say: person.getCurrentAddress(), person.getAddressOnDate(Date), person.getAddressHistory(), etc.