Added a concept of an explicit end to a parallel instead of making the
assumption that the last element in a list is the end of the parallel.
This is because some elements may have conditional or boundary event
flows which should not be sequenced to the join gateway.  If no explicit
end is specified within the steps, then we will use the last element as
always.