Submodule update for jml and soa
Adds support for optional provider config params to adx connector.
deduplicate agent stats logging per account key
Adds support for adgroup_id to adx exchange connector.

An agent can now set in the adx provider configuration the adGroupId
parameter, it is of type int64_t and optional. If set on the config it
will always be set in the bid response if the matching bid request
had it declared for the given adslot match data, otherwise (there is
no match) the response will be filtered and a 'No Bid' will be
sent as a response.
slightly improved element insertion when reporting agents stats
Merge branch 'USMediaConsulting-adx-adgroupid'
ADX connector now sets the BidResponse.Ad.vendor_type attribute.

This attribute is mandatory according to ADX's RTB protocol
specification.
ADX connector now sets the BidResponse.Ad.width and height attributes.

This attribute is optional according to ADX's RTB protocol specification
unless the bid BidRequest.AdSlot has more than one width and height
or if BidRequest.Mobile.is_interstitial_request is true. So setting
it anyways will not do any harm.
ADX connector now handles restricted categories.

Restricted categories need to be declared in the creative provider
configuration. The attribute is 'restrictedCategory' and it is a string
containing numeric ids separated by white spaces. I.e.:
restrictedCategory = "33 58"
If no restricted category applies then it should be set to 0 I.e. :
restrictedCategory = "0"

The doc says that if you are bidding with ads in restricted categories
you MUST declare them in BidResponse.Ad.restricted_category. This
way if a creative declares a restrictedCategory X and the request does
not allow it, it will get filtered and a 'No Bid' will be sent back.
Otherwise if the request declares X as allowed, it will be specified
on the response.
use alternate way of registering StructureDescription<RTBKIT::JsonHolder>
fixed build error
Replace atoi for std::stoi in adx exchange connector.
BidRequestSynth's generate function now accept a full RNG object.
Intial drop for MoPub Exchange Connetor.
* Mostly relies on OpenRTB2.1
* Checked against MoPub's sandbox.
* TODO: check the many assumptions:
  - rtt <= 200ms
  - optional fields of BidResponse made mandatory by MoPub (e.g. iurl)
* TODO: customer integration/validation
Merge branch 'adx-features' of https://github.com/USMediaConsulting/rtbkit into USMediaConsulting-adx-features
pruned unused code
adding makefiles
Merge branch 'MOPUB' of https://github.com/jsulmont/rtbkit into jsulmont-MOPUB
Add generic component to handle Creative configuration

This component takes as template parameter a class that'll hold the creative
configuration.  The connector is free to store and fetch whatever it needs.

For example, if a X connector needs the providerConfig to have the
advertiser name, it can configure the CreativeConfiguration class to
look for it. If not found, depending whether the connector requires this
configuration, the creative can be marked as "no compatible".

Snippet expander has also been implemented. For example, if a variable
fetched from the configuration is said to be a snippet, the value will
be looked up for variable between two markers, by default
%{this.is.a.variable}.

A variable represents a path to a value. This path can start from 3
distinct locations: the bidrequest, the meta information and the
creative.
Examples:

creative.width
bidrequest.publisher.id
meta.companyUserId

During the initialization, the CreativeConfiguration class will do its
best to optimize the expander:

* it will compute the list of variables;
* then it will get the offset of the part to replace in the snippet;
* it will also check that if the variable has a "fast" lookup (see later)
* and finally a functor will be computed.

When a variable is looked up, there is 2 possibilities:

* the variable exists in the expander dictionary;
* it does not.

If it does, the value can be fetched directly, otherwise, the expander
will encode back the bidrequest or the creative to fetch the needed
value. About the meta information, this transformation will always be
performed.

It is also possible to filter the value before injecting them into the
final snippet.
For example:

    %{meta.companyUserId#upper}

It upper the whole string.

There are 2 existing filters:

* upper
* lower

Filters can be stacked:

    %{meta.companyUserId#upper#urlencode}

urlencode is an useful filter not provided here.