Provide `critical_section` implementation.
The next version of svd2rust will depend on critical_section for Peripherals::take (see https://github.com/rust-embedded/svd2rust/pull/651), so this crate should provide an implementation (see https://docs.rs/critical-section/latest/critical_section/#providing-an-implementation).
This is already being worked on in the critical_section branch. There are a few optimization/codegen problems I'm looking at before deploying it/releasing a new version.
This version will be semver-compat with 0.3.0; a PAC that uses interrupt::free (msp430 0.3.0/0.3.1) for Peripherals::take can coexist w/ an application that uses the critical_section implementation that this crate will provide in 0.3.1. A PAC using critical_section can also coexist with msp430 0.3.0, though I don't see that happening often by accident :). In fact, it's probably better to mandate msp430 0.3.1 and above for PACs generated with the next version of svd2rust, just to avoid pulling in both bare_metal and critical_section types in the same application.
The semver-compat should be okay because interrupt::free and the critical_section impl provided are functionally identical. AFACIT, since interrupt::free disables interrupts and all msp430s are single core, interrupt::free can coexist with any other possible critical_section impls for msp430. This is because any critical section implementation will build upon disabling interrupts at some point as the lowest common denominator. interrupt::free is deprecated, however, and will be removed as part of semver-incompat changes.