improvements to RelatedItemsWidget

Note: This pull request depends on plone/plone.app.vocabularies#6; please merge that first.

* Add a @@getSource view which can be used to query a source instead of a named vocabulary for the ajax select and related items widgets. It is used for the Dexterity widgets only (since AT widgets don't support zope.schema sources, afaik) if the field's vocabulary was set to an object instead of a string. The field's write permission is checked to see if the source can be queried.

* The preferred API for vocabularies to support querying has changed. The old way was to pass an unparsed formquery to the vocabulary factory (this is still supported for backwards compatibility). Now the vocabulary or source can provide one of these methods:
  1. search_catalog - Takes a parsed formquery and returns an iterator of catalog brains.
  2. search - Takes a string query and returns an iterator of vocabulary terms.

  This was done for 2 reasons:
    1. It works even for vocabularies and sources that are instantiated at instance startup.
    2. It provides a 'search' method which mimics the interface expected of sources by formlib and plone.app.contenttree widgets, so should make it easier to migrate old code.

* The getVocabulary and getSource views now handle batching themselves instead of requiring the vocabulary to support slicing. It tries __getitem__ with a slice first, and if that fails it treats the results as an iterator and uses islice. This means all items are consumed up to the start of the slice, but that was happening anyway with the CatalogVocabulary's __getitem__ implementation, and it's probably not too big a concern since users will probably give up scrolling and search instead.

* Added a converter for the RelatedItemsWidget when used with a RelationChoice field. (i.e. selecting a single object)

* Fixed converters to make the RelatedItemsWidget work with text and choice fields that only want to store the UID of the selected object(s) rather than a full-blown relation.

* The RelatedItemsWidget is registered (in plone 5 only) as the default widget for all Choice fields using plone.app.vocabularies.catalog.CatalogSource as a source.

* Added tests for new code and improved coverage a bit.