Dungannon Swifts defeated Cliftonville on penalties in a dramatic Irish Cup semi-final at Windsor Park, securing their place in the final as defending champions.