Using Analytical Models to Efficiently Explore Hardware Transactional Memory and Multi-Core Co-Design