message: [C++] Let builder accept custom-alloc std::vector
  Change the FlatBufferBuilder's methods to accept std::vector parameters
  with non-default allocator, by adding another template parameter to
  them. This should make using the builder slightly more convenient, as
  one won't need to manually pass data() and size() separately.
diff: @@ -1816,7 +1816,8 @@ class FlatBufferBuilder {
  /// buffer as a `vector`.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  - template<typename T> Offset<Vector<T>> CreateVector(const std::vector<T> &v) {
  + template<typename T, typename Alloc>
  + Offset<Vector<T>> CreateVector(const std::vector<T, Alloc> &v) {
  return CreateVector(data(v), v.size());
  }
  @@ -1875,8 +1876,9 @@ class FlatBufferBuilder {
  /// buffer as a `vector`.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  + template<typename Alloc>
  Offset<Vector<Offset<String>>> CreateVectorOfStrings(
  - const std::vector<std::string> &v) {
  + const std::vector<std::string, Alloc> &v) {
  return CreateVectorOfStrings(v.cbegin(), v.cend());
  }
  @@ -2022,9 +2024,9 @@ class FlatBufferBuilder {
  /// to the FlatBuffer struct.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  - template<typename T, typename S>
  + template<typename T, typename S, typename Alloc>
  Offset<Vector<const T *>> CreateVectorOfNativeStructs(
  - const std::vector<S> &v, T (*const pack_func)(const S &)) {
  + const std::vector<S, Alloc> &v, T (*const pack_func)(const S &)) {
  return CreateVectorOfNativeStructs<T, S>(data(v), v.size(), pack_func);
  }
  @@ -2036,9 +2038,9 @@ class FlatBufferBuilder {
  /// serialize into the buffer as a `vector`.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  - template<typename T, typename S>
  + template<typename T, typename S, typename Alloc>
  Offset<Vector<const T *>> CreateVectorOfNativeStructs(
  - const std::vector<S> &v) {
  + const std::vector<S, Alloc> &v) {
  return CreateVectorOfNativeStructs<T, S>(data(v), v.size());
  }
  @@ -2057,8 +2059,9 @@ class FlatBufferBuilder {
  /// serialize into the buffer as a `vector`.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  - template<typename T>
  - Offset<Vector<const T *>> CreateVectorOfSortedStructs(std::vector<T> *v) {
  + template<typename T, typename Alloc>
  + Offset<Vector<const T *>> CreateVectorOfSortedStructs(
  + std::vector<T, Alloc> *v) {
  return CreateVectorOfSortedStructs(data(*v), v->size());
  }
  @@ -2070,9 +2073,9 @@ class FlatBufferBuilder {
  /// serialize into the buffer as a `vector`.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  - template<typename T, typename S>
  + template<typename T, typename S, typename Alloc>
  Offset<Vector<const T *>> CreateVectorOfSortedNativeStructs(
  - std::vector<S> *v) {
  + std::vector<S, Alloc> *v) {
  return CreateVectorOfSortedNativeStructs<T, S>(data(*v), v->size());
  }
  @@ -2148,9 +2151,9 @@ class FlatBufferBuilder {
  /// offsets to store in the buffer in sorted order.
  /// @return Returns a typed `Offset` into the serialized data indicating
  /// where the vector is stored.
  - template<typename T>
  + template<typename T, typename Alloc>
  Offset<Vector<Offset<T>>> CreateVectorOfSortedTables(
  - std::vector<Offset<T>> *v) {
  + std::vector<Offset<T>, Alloc> *v) {
  return CreateVectorOfSortedTables(data(*v), v->size());
  }
  