Replace dataset cloning with an immutable base

Instead of cloning the (huge) dataset a whenever we need to set up a new
graph, we instead store a single copy of the dataset, and deep-freeze it
using IceNine. An ObjectDataset is then assigned to each Qernel object
which takes care of setting any values required for calculating a
scenario.

The ObjectDatasets are then replaced at the start of the next request.

No significant performance improvement, but there seems to be less load
on GC resulting in fewer requests "spiking" to 2-3x the normal response
time.
Reuse Graph objects

Instead of throwing away the Graph objects after each request, we leave
then cached for reuse by future requests, instead only replacing the
dataset each time.

This is not at all threadsafe (but neither are several other parts of
the application), and cannot be used in the console since the Graph
instances will always refer to the dataset from the most recent request.
Therefore it is disabled whenever the Rails::Console is found.

Approximately 20% performance improvement when enabled. 200 requests
using "ab" concurrency=1, with a JSON payload taken from a real-world
ETModel request:

Before
------

Requests per second:    2.99 [#/sec] (mean)
Time per request:       334.857 [ms] (mean)

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   281  335  46.3    338     506
Waiting:      281  335  46.3    338     506
Total:        281  335  46.3    339     506

After
-----

Requests per second:    3.62 [#/sec] (mean)
Time per request:       275.950 [ms] (mean)

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   243  276  28.4    269     415
Waiting:      243  276  28.4    269     415
Total:        243  276  28.4    269     416