Add company, contact, and opportunity apis

- Refactor model to hold common code
- Update specs