FORGE-1633: Introduced WriteableResource
Merge pull request #396 from gastaldi/master

FORGE-1633: Introduced WriteableResource
FORGE-1632: Deprecate createResource methods
Removed uneeded initialization values
Adding method to return default package to targetPackage
Implemented FORGE-1619 - Command constraint-new-group to create a new group
FORGE-1628 Add TemplateFacet and a MavenTemplateFacet.

This adds support for a Facet that is activated when the
src/main/templates directory is present in a Maven project.
Templates present in this directory can be retrieved through this
Facet.

Extracted and refactored from the Forge 1 scaffold-x plugin.
FORGE-1611: updated to jboss-parent 14
FORGE-1636: fixed label
FORGE-1637: Fixed hasDefaultValue behavior
FORGE-1623: Do not monitor non-existent files
Implemented FORGE-1635
Merge pull request #398 from agoncal/FORGE-1635

Implemented FORGE-1635
Fixed FORGE-1631 - script output is out of sync and duplicated. Also improved script output streaming.
Increased transaction timeout
Using WeakHashMap instead of a ConcurrentHashMap.

The following test proves that elements are garbage collected correctly
with WeakHashMap:

   public void testWeakHashMap() throws Exception
   {
      final Map<String, WeakReference<String>> projects = new
ConcurrentHashMap<>();
      final Map<String, String> projectsWeak = new WeakHashMap<>();
      ExecutorService pool = Executors.newCachedThreadPool();
      for (int i = 0; i < 100; i++)
      {
         final String idx = String.valueOf(i);
         pool.execute(new Runnable()
         {
            @Override
            public void run()
            {
               projects.put(String.valueOf(idx), new
WeakReference<String>(new String(idx)));
               projectsWeak.put(String.valueOf(idx), new String(idx));
            }
         });
      }
      System.gc();
      Thread.sleep(5000);
      Assert.assertTrue(projectsWeak.size() < projects.size());
   }
Fixed FORGE-1461 and FORGE-1623
Fixed test input
Introduced a Template class into the Template SPI.

This is used to create type-safe wrappers of template resources
that can be handled by a single template engine.

Also modified the TemplateFacet API to remove redundant methods.
We now settle on using a reverse-FQDN based notation for
identifying template locations.
Merge pull request #399 from VineetReynolds/template-api

Introduced a Template class into the Template SPI.