Enabling Stanford and hint visibility experiments

- Specified levels on which experiments should take place.
- Switched to using ip addresses, rather than user ids, to determine experiment options.
- Added ip address hash to ActivityHint.
- Added and improved tests.
how often do we expect ip to be null?

how important is it that everyone in the same classroom has the same hash value (if it's very important you can also check the section id)? have you checked how often it is true that everyone in the same classroom will have the same 3rd segment, eg:
````
 Section.all.order('rand()').first.students.collect(&:current_sign_in_ip)
````