General algorithm: 
shift right all numbers into 'center' position; while the central part 
contains at least two numbers take the two edges of the central part and 
store them into the 'left' and 'right' part respectively; then if there is 
still a number in the central part move it to the left part; finally shift 
the right part into final position close to the left part (the left part is 
already in final position)

details: 
* in the main loop: numbers are written as eight binary digits before moving
  them over the remaining central part (to minimize the number of travels 
  over the lengthy central part);
* to further minimize the number of travels: bits are copied over two by two
  at each travel (two bits moved in one direction and two bits moved on
  the return journey) 
* movement over the central part is done two cells at a time ending at the 
  first two consecutive null cells (for speed);
* it turns out that binary digits use two conventions (1/2 or 0/1) and thus
  two conversion algorithms: the 1/2 convention is easier to work with but 
  it requires to setup eight 1 in the prologue (which is why the right number
  is encoded in the 0/1 convention to save approximately 16 bytes of code)
* is it is easiest to build the numbers back from their binary representation 
  when starting with the most significant bit; therefore the number being 
  moved to the right is reconstructed on the fly whereas the eight bits of 
  the other number are stored until the number can be reconstructed;
* some care was taken to avoid copying the numbers needlessly: they are at
  final place once reconstructed;
* a string of 1 is used as a rail to guide movement during the epilogue; this
  rail is obtained as a byproduct of the main loop (only half the rail is
  present if there is only one number but the epilogue handles it fine);
* moving numbers in the epilogue is done by decrementing them by two units
  at a time for speed;

notations:
  abcdef = the numbers to reverse
  n = loop counter (equals 9 after the inner loop; used to count the
    number of bits to take into account when reconstructing the left number)
  t = right number being reconstructed
  r = number to add to t (t := t*4 plus r minus 1)
  lxh = binary representation in 1/2 convention (l=lowest significant bit)
  lyh = binary representation in 0/1 convention

The current data cell is on top of ^ or at the immediate right of :
________________________________

  0abcdef0
  ^

>
  0abcdef0    | 00
   ^             ^
[

  [>]< [[->>>>>>>>>>>+<<<<<<<<<<<]<]
  000000000000abcdef
  ^
  >>>+>+>+>+>+>+>+>>>[>]<<
  000111111100abcdef0
                  ^ 
  [ 
    >>>
  0f00111111100bcde01111111100a | 000111111100abcdef00
                    ^                                ^
    [>]<[-<]<
  0f00111111100bcde00000000000a
                  ^
    [>>>>[>]+<[-<]<<<-]+
  0f00111111100bcd1000lyyyyyyha
                  ^
    [<<]<[>]+>>
  0f00111111110bcd1000lyyyyyyha
               ^
    [<<-[<-]++[>]>-]
  0f00hxxxxxxl00cd1000lyyyyyyha
               ^
    <+
  0f00hxxxxxxl10cd1000lyyyyyyha
              ^
    [
      [>]<++[<]>
  0fly00xxxxxln0cd11100tyyyyyha
        ^
        
      -                       :1x | :0x
      [->-                      0:0 | 0:1
        [-> [[>>]<] <+++> ]     00==4:00t  |  0:0==100t
        >[  [[>>]<] <++>> ]     00==r0:0t
        <                       00==r:00t
      ]>                      00==r0:0t | 0:x
      [-                        0:0 | 0:1
        [-> [[>>]<] <+>   ]     00==2:00t  |  0:0==100t
        >[  [[>>]<] >     ]     00==r0:0t
      ]                       r0:0tyy

      >>>[-<<<+>>>]           r0yty:0
      <<[->>++++<<]           r0y:0yt
      <<<-[->>>>>+<<<<<]      :00y0yt
    
      +>+>>+<                 11:11y | 11:01y
      [>>                       1111:1 | 1111:0
        [-<-< [[<<]>] <<+<+>>> 110:0 ]
        <                       11:00  | 111:10
        [-<   [[<<]>] <<+> 01:00 ]
                                1y:00
      ]                       1y:00  | 11:01y
      >                       1y0:0  | 110:1y
      [>                        1101:1 | 1101:0
        [-<-<+[[<<]>] <<<+>>> 100:0 ]
        <                       110:10 | 01:00
        [-<+  [[<<]>] < 00:00 ]
        >                       0y0:0
      ]                       yy0:0
      >>
      
  0flyyy00xxxln0cd1111100tyyyha
           ^
    ]
                              
  0flyyyyyyh0090cd11111111100ba  
               ^
    <-[-[-<+>]+<<[-<++>]>]
  0fe00111111110cd11111111100ba  
      ^
    >[>]<->>[[>>]<]
  0fe00111111100cd11111111100ba  
                           ^
    +<<<<<<<<<-<<
  0fe00111111100cd01111111110ba  
                ^
  ]
  
  0fe00111111100c01111111110ba | 0fe0011111110001111111110ba | 000111111100a
               ^                             ^                            ^
  > 
  0fe00111111100c01111111110ba | 0fe0011111110001111111110ba | 000111111100a
                ^                             ^                            ^
  [ <<+[[<<]>[-]<<+[>>>]<-] ]
  0fec0011111111000111111110ba | 0a00111111100
                 ^                           ^
  <+>+>+[>]>
  0fec0011111111111111111110ba | 0a00111111111100
                            ^                   ^
  [ 
    [ - 
  0fec0011111111111111111110ba
                            ^
      [[<<<]<+>>>>-]
  0fec1011011111111111111110ba | 0fec00111111111111111111100a
          ^                                                ^
      +[<<<]>[-]<<+
  0fec2001111111111111111110ba
      ^                                                   
      [>>>]>-    
    ]
    
  0fecb0011111111111111111100a
                            ^
    <+>>                             
  ]
  
  0fecba0011111111111111111100
                             ^
  <<[-<]<
]
  0fecba0     |  00
        ^         ^
<[<]
  
  0fecba0     |  00
  ^              ^