(PUP-744) Support persistent HTTP connections

This enables `puppet agent` and `puppet apply` to use persistent http connections, affecting catalog, pluginsync, remote file sources, reports. This is most noticeable when pluginsyncing many small files, e.g. modules, external facts, as previously, puppet would make a new HTTP connection (including TCP and SSL handshake) for every file.

Given a master:

<pre>
root@puppetmaster:/etc/puppet/manifests# ruby --version
ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
root@puppetmaster:/etc/puppet/manifests# puppet --version
3.6.2
root@puppetmaster:/etc/puppet/manifests# puppet module list
/etc/puppet/modules
├── puppetlabs-acl (v1.0.2)
├── puppetlabs-apache (v1.1.1)
├── puppetlabs-concat (v1.1.0)
├── puppetlabs-dism (v0.2.1)
├── puppetlabs-mysql (v2.3.1)
├── puppetlabs-reboot (v0.1.7)
├── puppetlabs-registry (v1.0.2)
└── puppetlabs-stdlib (v4.3.2)
</pre>

Given a script to execute the agent 10 times (deleting the pluginsync destination directory each time):

<pre>
#!/bin/bash
for i in `seq 1 10`
do
  printf .
  rm -rf ~/.puppet/var/lib
  bundle exec puppet agent --onetime --no-daemonize --server puppetmaster.solar.lan 2&> err.log
done
</pre>

Without these commits, it takes the agent 1m22s:

<pre>
$ git rev-parse HEAD
cb4ad1f19b043a70ba17e4103a25f5c97a76948b
$ time ./test.sh
..........
real	1m22.362s
user	0m43.996s
sys	0m7.456s
</pre>

With these commits, it takes 38s:

<pre>
$ git rev-parse HEAD
867ea2e86fa263d2ee64db2dda0d9f4004b86878
$ time ./test.sh
..........
real	0m38.357s
user	0m24.662s
sys	0m6.807s
</pre>