ipa::phoneme -- initial design & implementation

The current model of a phoneme is based on Kirshenbaum's ASCII-IPA
and is modelled as a collection of Kirshenbaum features. This is a
reasonable first attempt, but suffers several problems:

  1.  It is slow to get/set/query any given feature;

  2.  You cannot quickly and easily identify a value from a set of
      features (e.g. the place of articulation, or stress level);

  3.  It does not represent the entire IPA chart (specifically, it
      is missing diacritics, supragegmentals and tone markings);

  4.  The phoneme object is larger than needed;

  5.  It is difficult to identify the base vowel/consonant used in
      a given transcription;

  ...

As such, this is an attempt to address these design deficiencies.
It is being done in parallel to the current model until the new
model is at the point where it can replace it.

The primary representation is as a bit-masked integer, with this
change adding the logic to manipulate the bits within the integer
value:

  1.  Binary values (e.g. +/- voiced) are stored as a single bit
      in the integer instead of as two mutually exclusive values
      (e.g. voiced/voiceless);

  2.  Ranged values (e.g. vowel height or place of articulation)
      are stored as sequential values over a range of bits in the
      integer.

This collection of binary and ranged values will be added in a
future commit and the complete set will be enough to describe all
phonemes on the IPA chart.

The Kirshenbaum feature model can then be built on top of this, as
well as other feature-based phonetic descriptions, that can be used
to describe phonemesets and phoneme morphological rules.