WIP: Add ability to get/set a crush map from the cluster

@jcsp @dmick 
There are still two failing tests:
<pre>
======================================================================
FAIL: test_list_delete (tests.test_keys.TestKey)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/calamari/rest-api/tests/test_keys.py", line 35, in test_list_delete
    self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
AssertionError: 200 != 204
-------------------- >> begin captured logging << --------------------
django.request.profile: DEBUG: [3.98302078247ms] /api/v2/key
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: test_list_patch (tests.test_keys.TestKey)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/calamari/rest-api/tests/test_keys.py", line 22, in test_list_patch
    self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
AssertionError: 200 != 204
-------------------- >> begin captured logging << --------------------
django.request: DEBUG: KEYS [{u'status': u'accepted', u'id': u'minion1'}, {u'status': u'accepted', u'id': u'minion2'}]
django.request.profile: DEBUG: [3.39293479919ms] /api/v2/key
--------------------- >> end captured logging << ---------------------

----------------------------------------------------------------------
</pre>

that are a result of  8d22cf74844c8733ef58db0d2d9c21bfa8b91c3f
it is somewhat unexpected. If I can't figure it out today I will fall-back to the StaticHTMLRenderer
The f.flush() should be sufficient to ensure that another process opening this file will see the data we just wrote.  fsync makes it persist to disk, which we don't care about because it's a temp file -- I'd remove the fsync here to avoid it being a red herring.