SPF plugin: refactored, tests, new config option

added POD description of spfquery note

changed spf_deny -> reject  (and offered 4 more options, see POD for reject)
	backwards compatible with old config settings
	replicates qmail-smtpd SPF patch behavior

improved logging (again)

uses a stringy eval 'use Mail::SPF' in the register sub. If missing, warn and log the error, and don't register any hooks. This is much nicer error than the current, "*** Remote host closed connection unexpectedly." broken mail server that results from enabling the SPF plugin without Mail::SPF installed.

background: I noticed I was deferring valid emails with the SPF plugin at 'spf_deny 1', and without changing the code, there wasn't a way to change how ~all records were handled. This provides that flexibility.
greylisting: added upgrade note
added loglevel option for plugins

Plugins can now use a 'loglevel' argument in config/plugins entry

Includes user instructions prepended to docs/logging.pod

Already works for all plugins that use named arguments
domainkeys: only register hooks if Mail::DomainKeys is loadable
enable domainkeys plugin
enable more plugins for testing purposes
consolidate auth logic into Qpsmtpd::Auth

These 3 auth plugins all have a data store they fetch the reference
password or hash from. They then match the attempted password or hash
against the reference. This consolidates the latter portion (validating
the password/hash) into Auth.pm.

* less duplicated code in the plugins.
* Pass validation consistently handled for these 3 plugins.
* less work to create similar auth plugins

Qpsmtpd::Auth also caches the CRAM-MD5 ticket. It could also cache
user/pass info if this was desirable.
added badmailfromto to config/plugins
basicheaders: added log messages, tests, named args

added log messages at each exit point
added tests
added reject_type option (defer -vs- deny)
added named argument parsing
removed redundant test name from output

this information is already presented in a # header
(I hadn't noticed that before)
improve portability of basicheader plugin tests

replaced `date` with POSIX qw(strftime);
delete 3 relay plugins
new relay plugin, with tests!

replaces functionality of previous 3 relay plugins
basicheaders, add reject option, loglevel

added reject option
document the existence of the loglevel option
relay: added POD for loglevel option
dnsbl test: set relayclient

another test might set it, which changes the test outcome
basicheaders: improved POD and expanded tests

factored date validity tests into their own sub
added tests
basicheaders: Charlie's corrections

spell deferr correctly
add name of deprecated config name to error message
earlytalker: many changes

consolidated chunks of code duplicated 4x into log_and_deny and log_and_pass

in apr_*_handler subs, return DECLINED when connection is not available to read (like during tests)

added 23 tests

deprecate action argument
	'action log' did nothing, better logging controls available with loglevel
	'action deny'  ->  reject 1
	'action denysoft' =>  reject 1 reject_type temp

POD
use head2 for config options (instead of over, item, back)
added loglevel section
updated for replacement of action with reject options
dnsbl, POD tweaks, DENY type tests

consolidated POD at top of file
added example options to reject_type POD head
added an example loglevel entry

consolidated DENY[SOFT|DISCONNECT] logic into get_reject_type
added tests for get_reject_type