* Consider using PSI_STATUS_NA instead of ifdeffing around

   All the #ifdef blocks around descriptors/attributes and their
   respective getter functions is just going to spiral out of
   control.  Maybe all attributes should just be always available but
   raise an AttrNotApplicableError when accessed?

* Create a libpsi.a static library

   All utility functions should go into libpsi.a to simplify getting
   the correct dependencies in setup.py, this is arleady turning into
   an unmaintainable hell.  The setup.py script should then use
   distutils.ccompiler.has_function() and friends to produce a
   config.h for libpsi to know what to build.  This library can be
   built using the build_clib command from distutils.

   This will also mean that individual modules will be smaller since
   only the used symbols will exist in the sofiles, intead of all of
   them.

* Simplify module sources

   Code that is shared between archs should end up in libpsi.a.  And
   each arch must have it's <arch>_<thing>.c file, even if it is just
   calling the shared function an no more.

* Improve psi_read_file() API

   psi_read_file() returns -2 for permission problems.  But it does not
   set a Python exception.  To be consistent it should really set an
   exception and anyone who wants to ignore it should clear the
   exception.  Other functions that return negative values other then
   -1 may need to do this too.

* Introduce procfs_read_struct()?

   For SunOS and AIX /proc files it could be possible, and safer and
   faster, not to dynamically allocate the memory but rather read into
   a statically allocated space.  You'd use it like:

     struct psinfo psinfo;

     if (procfs_read_struct(&psinfo, sizeof(struct psinfo), pid, "psinfo") < 0)
         return -1;

* Consider renaming the arch module

   The arch module really describes the whole system, not just the
   architecture.  Therefore the name is a bit misleading.  However
   calling it `sys' would clash with the stdlib sys module and
   `system' seems a bit long.

   How about `plat' or `platform'?  Note that `platform' is an stdlib
   module, so that might be a bad idea.

* Make the Arch class a singleton

   Currently each instance copies some memory, that's not really
   efficient.  I can't see any harm in the arch class being a
   singleton (or borg).

* Improve InsufficientPrivs error message

   It would be good if psi_checkattr() could also say what process the
   error message is for instead of just the attribute.

* Consider having ArchLinux24 and ArchLinux26 sub-types

   In the unittests I find myself having to say `if isinstance(arch,
   ArchLinux) and arch.release[:3] == "2.6"' often.  Maybe it would be
   easier if we could say `if isinstance(arch, ArchLinux26)'?
