Build multipart/form-data request bodies (Finch does not encode multipart for us).
@spec encode_multipart(map(), map() | list(), String.t() | nil) :: {:ok, binary(), String.t()} | {:error, term()}
@spec generate_boundary() :: String.t()