Use a single TagsField class to export supporter tags.
ExporterInterface & ExporterBase and refactoring of field wrappers.

A new ExporterInterface and it's default implementation ExporterBase.
The __construct() now takes the mapping as argument instead of the
contact object.

All field wrappers access the contact objects exclusively via the
exporter object. So it's possible to the exchange the contact object
(ExporterInterface::setContact()) and reuse the exporter object for
multiple contacts.

All field wrappers must implement the ExporterMapperInterface.

All CampaignionContactExporter classes have been modified to inherit
from ExporterBase.
[supporter-export] Make the address_mapping part of the Exporter.

This duplicates the definition of the address_mapping. One time for the
fields that the exporter provides another time for the columns that the
CSV contains. Exporters currently don't provide a list of all keys that
they offer. This might be changed at some point. Then it would be
possible to use this list for the CSV-headers.
[newsletters] Remove old migrations so that we don't have to port them.
Introduce Contact-type plugin system.

\Drupal\campaignion\Contact is now the entity class for redhen_contacts.
We don't need to cast \RedhenContact objects anymore.

The plugin-system consists of the following classes:

ContactTypeManager: Plugin loader and factory. The main class to be used
by code working with exporters/importers.

ContactTypeInterface: Interface that all Contact-Type classes must implement.
Port everything to use the new Contact-API.

Contact-type features (ie. campaignion_supporter from the
campaignion_starterkit) need to provide a contact-type class via
hook_campaignion_contact_type_info().

Profile using any CRM functionality need to provide at least one
contact-type and set the 'campaignion_supporter_contact_type' which
defaults 'contact'. Hint: use "drush vset" or variable_set().

Failing to provide the default contact-type will lead to a
UndefinedContactTypeException being thrown.
[form_builder] Add salutation 'Organisation'
Merge branch 'import' into 7.x-1.x
Use WebformSubmission as source instead of little_helpers class directly.
Test for wrapping a contact.
Make campaignion_newsletters independent of any CRM.

- Use WebformSubmission directly as $source.
- Check that the CRM is available before using it.
- If both sources are available - use a new CombinedSource class.
Make campaignion_newsletters independent of any CRM.

- Use WebformSubmission directly as $source.
- Check that the CRM is available before using it.
- If both sources are available - use a new CombinedSource class.
[cleverreach] Make 'ERROR 20: No data found.' an persistent error.
Don't deactivate dependencies.
[supporter_tags] wrappedContact vs. contact.
[language_switcher] unify naming of block and JS.
Fixup typo.
[recent_supporters] BUGFIX query limit

- visible_count is intended for front end config not limiting the sql query
- therefore: introduce new global setting for recent supporters 'query_limit'
Merge in pull request #7: recent-supporters query-limit.
GA share click handler moved to other project

- the GA custom event logic for share tracking moved to share_light
  (where the share links are defined)