The easiest is to just go with some hosting solution, as maintaining your own server is going to be a lot of work (upgrades, backups, security issues, etc., etc.).
For hosted solutions, I'd look into either google apps or microsoft's office365. Office365 (maybe $72/user/year) might not be quite as cheap as google's offering ($50/user/year), but it seems to be a surprisingly viable alternative to google apps. The only possible issue that I've found with office365 is that password aging is turned on. Not only do they appear to not emphasize that password aging is turned on, but:
1. They don't give you any warning that the password is about to expire, unless you use the web interface (Outlook, Thunderbird, iOS, and android users appear to be screwed). I think some support doc actually recommends that you manually add a reminder to your calendar.
2. Once the password times out, you are, of course, locked out.
3. You cannot change the timeout interval.
4. While you can turn off password aging, doing so requires the use of a windows box and arcane windows powershell command-line commands. Yes, that's not a typo: powershell commands. Yup, there doesn't appear to be a web interface for this.