JCLOUDS-611: Neutron LBaaS (version 1) extension request

https://issues.apache.org/jira/browse/JCLOUDS-611

main:
- Added getLBaaSv1Api in NeutronApi interface
- Added LBaaS v1 alias in NeutronHttpApiModule class
- Added LBaaS v1 extension in ExtensionNamespaces class
- Added domain/lbaas/v1 package
- Added extensions/lbaas/v1 package
- Added fallbacks/lbaas/v1 package
- Added functions/lbaas/v1 package

tests:
- Added extensions/lbaas/v1 package
- Added resources/extension_list_with_lbaas_v1_response.json
- Added resources/extension_list_without_lbaas_v1_response.json
- Added resources/lbaas/v1 package
Here are 2 examples to use LBaaS v1 or LBaaS v2. 
as you can see, it would be difficult to have a common API compatible with LBaaS v1 and LBaaS v2.

      // Get org.jclouds.openstack.neutron.v2.extensions.lbaas.v1.LBaaSApi extension
      Optional<LBaaSApi> lbaasV1ApiExtension = neutronApi.getLBaaSv1Api(region);
      if (lbaasV1ApiExtension.isPresent()) {
         LBaaSApi lbaasV1Api = lbaasV1ApiExtension.get();
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Pool
         Pool.CreatePool createPool = Pool.createBuilder(subnetId, Protocol.HTTP, Pool.ROUND_ROBIN)
               .name("mypool").provider("HAPROXY").build();
         Pool poolV1 = lbaasV1Api.createPool(createPool);
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Member
         Member.CreateMember createMember = Member.createBuilder(poolV1.getId(), privateIPAddressOfNode, 80).build();
         Member memberV1 = lbaasV1Api.createMember(createMember);
         // Create 2 org.jclouds.openstack.neutron.v2.domain.lbaas.v1.HealthMonitor
         HealthMonitor.CreateHealthMonitor createHealthMonitor1 = HealthMonitor.createBuilder(ProbeType.HTTP, 60, 5, 2).build();
         HealthMonitor firstHealthMonitorV1 = lbaasV1Api.createHealthMonitor(createHealthMonitor1);
         HealthMonitor.CreateHealthMonitor createHealthMonitor2 = HealthMonitor.createBuilder(ProbeType.PING, 60, 5, 2).build();
         HealthMonitor secondHealthMonitorV1 = lbaasV1Api.createHealthMonitor(createHealthMonitor2);
         // Associate Health Monitors to Pool
         HealthMonitor.AssociateHealthMonitor associateHealthMonitor1 = HealthMonitor.associateBuilder(firstHealthMonitorV1.getId()).build();
         HealthMonitor healthMonitorAssociated1 = lbaasV1Api.associateHealthMonitor(poolV1.getId(), associateHealthMonitor1);
         HealthMonitor.AssociateHealthMonitor associateHealthMonitor2 = HealthMonitor.associateBuilder(firstHealthMonitorV1.getId()).build();
         HealthMonitor healthMonitorAssociated2 = lbaasV1Api.associateHealthMonitor(poolV1.getId(), associateHealthMonitor2);
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v1.VIP
         VIP.CreateVIP createVIP = VIP.createBuilder(subnetId, Protocol.HTTP, 80, poolV1.getId())
               .name("myvip").build();
         VIP vipV1 = lbaasV1Api.createVIP(createVIP);
      } else {
         logger.info("LBaaS API Version 1 is unavailable");
      }

      // Note: this is my understand of the LBaaS API improvement
      // see https://blueprints.launchpad.net/neutron/+spec/lbaas-api-and-objmodel-improvement
      // Note: the OpenStack Networking API V2.0 document (September 9, 2014) describesLBaaS v2, but
      // it has been reviewed September 23, 2014 and finally, ONLY the LBaaS v1 API is described.
      // Does it mean next OpenStack release (Juno) will not provide LBaaS v2? I think so.

      // Get org.jclouds.openstack.neutron.v2.extensions.lbaas.v2.LBaaSApi extension
      Optional<LBaaSApi> lbaasV2ApiExtension = neutronApi.getLBaaSv2Api(region);
      if (lbaasV2ApiExtension.isPresent()) {
         LBaaSApi lbaasV2Api = lbaasV2ApiExtension.get();
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v2.Pool
         // Note: vipId, subnetId, protocol and provider are not attributes of Pool anymore in LBaaS v2
         Pool.CreatePool createPool = Pool.createBuilder(Pool.ROUND_ROBIN)
               .name("mypool").build();
         Pool poolV2 = lbaasV2Api.createPool(createPool);
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v2.Member
         // Note: subnetId is new but optional. I think moving subnetId from pool to member allows load balancing between nodes located on different subnets.
         Member.CreateMember createMember = Member.createBuilder(poolV2.getId(), privateIPAddressOfNode, 80)
               .subnetId(subnetId).build();
         Member memberV2 = lbaasV2Api.createMember(createMember);
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v2.HealthMonitor
         HealthMonitor.CreateHealthMonitor createHealthMonitor = HealthMonitor.createBuilder(ProbeType.HTTP, 60, 5, 2).build();
         HealthMonitor healthMonitorV2 = lbaasV2Api.createHealthMonitor(createHealthMonitor);
         // Associate Health Monitor to Pool
         // Note: Only one health monitor can be associated to a Pool in LBaaS v2: Pool.healthMonitors is replaced by Pool.healthMonitorId
         Pool.UpdatePool updatePool = Pool.updateBuilder().healthMonitorId(healthMonitorV2.getId()).build();
         poolV2 = lbaasV2Api.updatePool(poolV2.getId(), updatePool);
         // VIP does not exist anymore and is replaced by LoadBalancer and Listener
         // LoadBalancer is responsible of service exposition.
         // Note: name, description, subnetId and address moves to LoadBalancer
         // Listener is responsible of traffic routing for a protocol.
         // Note: protocol, protocol_port, session_persistence and connection_limit moves to Listener
         // Listener has also its own name and description
         // A LoadBalancer can have multiple Listener, each associated to a Pool
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v2.LoadBalancer
         LoadBalancer.CreateLoadBalancer createLoadBalancer = LoadBalancer.createBuilder(subnetId).name("my load balancer").build();
         LoadBalancer loadBalancerV2 = lbaasV2Api.createLoadBalancer(createLoadBalancer);
         // Create org.jclouds.openstack.neutron.v2.domain.lbaas.v2.Listener
         Listener.CreateListener createListener = Listener.createBuilder(poolV2.getId(), loadBalancerV2.getId(), Protocol.HTTP, 80)
               .name("HTTP listener").build();
         Listener listenerV2 = lbaasV2Api.createListener(createListener);
      } else {
         logger.info("LBaaS API Version 2 is unavailable");
      }