[module] (GH-92) Normalize module titles and ivars

Previously, each Puppet module implementation had a mashup of instance
variable names and title handling. In the case of non-Forge modules,
using a title like 'owner/modulename' would cause that module to be
installed into the path 'owner/modulename' which would then be deleted.
This commit moves common variable declaration into the base class and
adds a common title parsing implementation.
[module/base] Define an interface for modules

The module API developed in a rather organic fashion and did not have a
well defined interface that modules needed to implement. This commit
adds abstract methods to the module base class that document how derived
classes should implement them.
[module] Allow SVN modules to have owner/modname titles

Right now modules are selected based on the derived class providing a
`.implement?` method that indicates whether it can install the given
module. This is a rather loose model and ultimately it should be
replaced with a KeyedFactory instance. In addition this has strange
ordering behaviors, where SVN modules could not have an
'owner/modulename' title because the Forge module would get to it first.

This commit works around that deficiency by requiring the Forge module
afterwards so that the SVN can register itself first and implement those
modules.
Merge pull request #190 from adrienthebo/issue/master/gh-92-git-module-title

(GH-92) Allow non-forge modules to have `owner/modulename` specified modules.