Initial import
Fix test error that was introduced in a rush.
Add IChannelLookup interface.

Although we discussed IScheduler and I'm not
sure about its usefulness, I'm leaving it in for
now.
First step towards an implementation of a minimal and generic crud form.
Render form tags and such at correct places.
Use a table to render the edit part of the crud-form.  One row per
entry.
don't need exact version
Channel controlpanel is now cruddy
ignoring request for addform. Addform needs to be udpated before editform
Neurotic clean-up
We need to update the subforms when we delete an item; otherwise the
deleted item is still visible.
Don't show the edit table if there's no content.
Accept any false value for the delete widget.
Fix an issue with the edit form; clicking delete in a browser (and
with 'crud-edit.Martha.widgets.delete-empty-marker' in it) would cause
a component lookup error in 'z3c.form.field.FieldWidgets.extract',
here:

    if raw is not interfaces.NOVALUE:
        value = interfaces.IDataConverter(widget).toFieldValue(raw)

The checkbox widget cannot be adapted to 'IDataConverter', which
probably is a bug.  I'm overriding the CheckboxWidget's 'extract' to
return NOVALUE for a missing value.
Hopefully the last delete checkbox related bug fixed; and some random
cleanup.
- We already updated the row's subform, so let's only render it; this
  fixes a problem where the widgets (and their errors) would be reset.

- Some cleanup; "Apply changes" sounds better than "Edit" etc.
Allow a field to be used both for display *and* for editing.  This is
useful when we want the name to link to the item, but we also want the
name to be editable.
Don't mark a field required if it's only being shown.
In the crud form; use "select" instead of "delete" for selecting items
for deletion.  This is to avoid the what-does-"Apply changes"-do
confusion.
Implemented message states and queues.  These are good for queueing
and dispatching messages and for display of statistics (to be
implemented).