title: Insert Layer underneath existing layers in ggplot2 object
body: <p>Given an Existing plot object is it possible to add a layer <strong>UNDERNEATH</strong> an existing layer? </p>
  
  <p>Example, in the graph below, is it possible to add <code>geom_boxplot()</code> to <code>P</code> such that the boxplot appears <strong>underneath</strong> <code>geom_point()</code>?</p>
  
  <pre><code>## Starting from: 
  library(ggplot2)
  P &lt;- ggplot(data=dat, aes(x=id, y=val)) + geom_point()
  
  ## This adds boxplot, but obscures some of the points
  P + geom_boxplot()
  </code></pre>
  
  <h3>Expected Output:</h3>
  
  <pre><code># Which is essentially
  ggplot(data=dat, aes(x=id, y=val)) + geom_boxplot() + geom_point()
  ## However, this involves re-coding all of P (after the point insertion of the new layer).
  ##   which is what I am hoping to avoid. 
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/5gAjl.jpg" alt="Example Output"></p>
  
  <hr>
  
  <p><strong>Bonus question:</strong>  If there are multiple layers in the existing plot, is it possible to indicate where specifically to insert the new layer (with respect to the existing layers)?</p>
  
  <hr>
  
  <h3>SAMPLE DATA</h3>
  
  <pre><code>set.seed(1)
  N &lt;- 100
  id &lt;- c("A", "B")
  dat &lt;- data.frame(id=sample(id, N, TRUE), val=rnorm(N))
  </code></pre>