message: Built scenes from prev scenes + new ones
  Modelled on the move function from Motion component of NavigationReactMobile. If a scenes not in the new stack then need to still render it until the native pop animation completes
diff: import * as React from 'react';
  +import { performance } from 'perf_hooks';
  class Ghost extends React.Component<{children: any}, {items: any}> {
  constructor(props) {
  @@ -6,7 +7,27 @@ class Ghost extends React.Component<{children: any}, {items: any}> {
  this.state = {items: []};
  }
  static getDerivedStateFromProps(props, {items: prevItems}) {
  - var items;
  + var tick = performance.now();
  + var {data, getKey} = props;
  + var dataByKey = data.reduce((acc, item, index) => ({...acc, [getKey(item)]: {...item, index}}), {});
  + var itemsByKey = prevItems.reduce((acc, item) => ({...acc, [item.key]: item}), {});
  + var items = prevItems
  + .map(item => {
  + var matchedItem = dataByKey[item.key];
  + var nextItem: any = {key: item.key, data: matchedItem || item.data};
  + nextItem.index = !matchedItem ? item.index : matchedItem.index;
  + nextItem.popTime = !matchedItem ? tick : item.popTime;
  + return nextItem;
  + })
  + .filter(item => !item.popTime || item.popTime < tick + 1000)
  + .concat(data
  + .filter(item => !itemsByKey[getKey(item)])
  + .map(item => {
  + var index = dataByKey[getKey(item)].index;
  + return {key: getKey(item), data: item, index};
  + })
  + )
  + .sort((a, b) => a.index !== b.index ? a.index - b.index : a.key.length - b.key.length);
  return {items};
  }
  render() {
  