- Methods in the parted module that just return data and take in no
  parameters...make those read-only properties and get rid of the
  method.  Since we have more or less established the API now, mark
  the methods as Deprecated and leave them around for a release
  before removing them.

- add parted.Device.toSectors() method that takes in a size specification,
  such as 10.5MB, as a string and converts that size to a sector count
  based on the sector size of that Device

- use disttools from Python to do as much work as possible

- Walk through all of the src/py*.c files and make sure libparted exceptions
  are captured and filtered back up through Python.  Will need to define some
  sane Python exception classes for libparted's exceptions.

- Handle exceptions from libparted and pass to Python as necessary.  The
  PED_ASSERT things are where libparted aborts, so we may want to catch things
  before it goes in to libparted so we can throw an exception rather than
  letting the library abort().  The ped_exception_throw() instances are all
  libparted's own exception-like system.

- Handle exceptions throughout the _ped module code.  Unique exceptions as
  much as possible.

- Figure out what, if anything, we can do with timers.  They are optional in
  libparted, but do we want to support them in pyparted?

- Error handling in the get and set methods.

- Free memory in error handling cases.

- Exception handling:
      - Audit error messages to make them more useful.

- All test cases with '# TODO' in the runTest() method.  Be sure to uncomment
  them once you have written the test.

- Make sure PyTypeObjects that have a tp_init are allocating memory that the
  garbage collector knows about.  I'm not sure if PyType_GenericAlloc or
  PyType_GenericNew do this.

- Coding policy that we need to make sure we're doing:
  If object creation fails, we need to use PyObject_GC_Del() to destroy it
  before throwing an exception at the user.  For all other instances where
  we need to delete or destroy the object, use Py_XDECREF().  Once the ref
  count is zero, the GC will take over and run dealloc() for that object,
  which will eventually run PyObject_GC_Del().  Basically, we should only
  be using PyObject_GC_Del() in the convert functions or in __init__
  constructors where we are making a new object for the user.

  NOTE: If we need to destroy an object due to creation failure and the
  object we are creating has other PyObject members, call Py_XDECREF on
  those members rather than destroing them.  We can't ensure that there
  will be no other references to those members, so let the normal object
  destructor handle PyObject members, but forcefully destroy the object
  we are trying to create.

- destroy() methods don't seem to be destroying the Python object.

- Make sure this new code works in Python 3000

- Look through all PyTypeObject objects and see where we can expand
  their functionality.  Can we add str() support, for instance.

- Move the constraint functions presently in _ped to be in the __init_()
  method for _ped.Constraint, similar to what was done for _ped_Disk_init:
      constraint_new_from_min_max
      constraint_new_from_min
      constraint_new_from_max
      constraint_any
      constraint_exact

- parted module:
      - Write docstrings for everything

- autoconf
      - More detailed API checks for libparted and Python

... and much much more
