Bind refactoring: naming, constructor inheritance.

Changed name of StoredArgs to StoredArgsRef when they are representing
a reference type.
Added tuple_size function and used constructor inherithance to simplify
the code.
Rewritten implementation of bind.

Previously to unapack all placeholders the bind usd the implementation
based on travelsa over stored arguments implemented using recursive
functions calls.

This imnplementation was breaking zero-overhead pricinciple because
the bind for single argument placeholder may be implemented as
  f(transform(stored_args, call_args...)...)
Where transform(agr, call_args...) returns:
  call_args[i] if arg is placeholder _i;
  arg(call_args...) if arg is bind expression;
  arg otherwise.
Which generates less functions calls than recursive traversal.

New implementation firstly generates the list (P...) of arguments to
be passed on each position if form (type, position) and next calls
following expression:
  f(resolve_argument<P>(stored_args, call_args...)...)
Where resolve_argument<(type, i)>(stored_args, call_args...) returns:
  call_args[i] if type is call;
  stored_args[i] if type is stored;
  stored_args[i].get() if type is ref;
  stored_args[i](call_args...) if type is bind.
Making the implementation for group placeholder equally efficient.