Allow navbar on hardware key devices, and overhaul immersive mode overhaul

This the commit formerly known as http://gerrit.aokp.co/#/c/15748/ by Brandon McAnsh <brandon.mcansh@gmail.com>

... now with a facial tattoo, a baseball bat, and a bigger dick.

PS2: remove removePreference from systemuisettings.java for devicekeys > 0
PS3: Show navring settings ALWAYS
     relocate switch to system_ui_settings
     conditionally enable navbar prefscreen based on value
PS7: rework for immersive mode visibility changes
     rework immersive mode settings changes for THIS too
     use array resources instead of generating an arraylist and returning an array of charsequences
         ... like a BAUSS
PS8: correct detection of the case where a selectedValue (immersiveStyle == 3) would be invalid
         after disabling the navbar on a device with hardware keys (only has values: 0,1,2)
PS9: save some state so a settings get is not necessary when validity-checking immersiveStyle
         after the navbar state on a device with hardware keys changes
ps10: array length != method... sleep == ftl
ps12: debounce setImmersiveModeEntries and onPreferenceChange
ps13: kill setImmersiveModeEntries. correctly handling it should be done on the frameworks side, anyways.
PS14: multiple SwitchPreferences: https://code.google.com/p/android/issues/detail?id=26194
         ICECREAM SANDWHICH WAS A LONG FUCKING TIME AGO
         OTHER PREFERENCES WORK FINE... SO _WHAT_ _THE_ _FUCK_

Change-Id: I4e5bae40eeb8963fab008fead4c7e0797cca4fb9
Merge remote-tracking branch 'upstream/kk44' into kk44