There are already complex and detailed threads on each of each. The summary version is that all are possible, but all require significant custom coding both to add the facilities and also to tailor each to the specifics of your situation.