So we created a calendaring / task / contacts migration process for Exchange on-premises to Office 365 that is an improvement over existing methods in that it gives you more information about guests in meetings (it's an improvement over everyone else if we give you ANY information about guests).
On-premises a meeting looks like this:
Migrated to another Exchange server it will look like this in Outlook with our "flat" option:
Note that we can map user names and resource names and preserve information about attendees outside the domain.
And you can download and try it here with documentation here. The trial version will insert your appointments for a month into the future. We're licensing it for $299 for one domain for two weeks. Based on our MDaemon migrations, we've seen under 1000 user migrations easily accomplished in that time. If you need more time, ask us.
If you manage your own migration you can get your data in for very low cost with imapsync handling email and our tools handling calendars, contacts, and tasks.
For those of you who want fully-functional calendars post-migration, we offer:
Full-state calendar migration for enterprises with full-state sync.
Contact us for additional details on full-state (though the documentation above is a great place to start).