handle various permission failures

- turn various EPERM, EACCES errors into 403
- add `writable` bool field to contents models
- if a notebook is not `writable`, save is disabled

New notebook failed on read-only tree:

![screen shot 2014-11-11 at 17 19 48](https://cloud.githubusercontent.com/assets/151929/5003718/25dba100-69c7-11e4-9280-afd3fb6d0920.PNG)

"Last saved" text is replaced with 'read-only':

![screen shot 2014-11-11 at 17 19 23](https://cloud.githubusercontent.com/assets/151929/5003732/4890187a-69c7-11e4-8983-7a3f88076cb1.PNG)

An attempt to save sets a notification:

![screen shot 2014-11-11 at 16 35 56](https://cloud.githubusercontent.com/assets/151929/5003740/5b700cf2-69c7-11e4-977d-b63197a895d1.PNG)

Opening a notebook without read permissions:

![screen shot 2014-11-11 at 16 35 35](https://cloud.githubusercontent.com/assets/151929/5003741/65bf1d42-69c7-11e4-9152-c896ab60ba52.PNG)

Rename fails due to permissions:

![screen shot 2014-11-11 at 17 23 33](https://cloud.githubusercontent.com/assets/151929/5003749/87de6d38-69c7-11e4-9168-ee708af31888.PNG)

ping @ellisonbg 
They started out as functions, but I kept needing references to `self`, so it ended up simpler for them to be methods than keep passing `self` between functions, making them practically methods anyway.