Implement static page content section reassignment

* Provide the machinery to enable reassignment of the content_section
  while editing a static_page. Care is taken to ensure that when moving
  a ContentGroup parent, it's children move with it.
  (addresses #1819)
Disabling move b/w null content section and not

* The code for moving between the null content section case (like
  Syllabus pages) and the not-null case, and back again, isn't tested as
  well as I like, so this commit adjusts the UI so that users don't
  have that option.
Enforce constraint on course_info pages

* "course_info" pages (those static pages that appear in the top bar
  drop-down) may only ever appear there, where normal pages (those that
  appear in content sections) may only ever appear there.
Make ContentGroup.groupinfo_by_id more defensive