Bug fixes and cleanup to BP

Several fixes and a bit of cleanup:
 - Chain BP wasn't getting right factor marginals for case of only 1 varying variable, which could mess up learning completely because of wrong logz (this was hard to catch because we cache logz and so noticing the bug depends on caching a wildly inaccurate logz, such as from a bias factor)
 - null sets of varying variables weren't handled properly anywhere, or ever used, so they've been removed
 - Max vs sum bp was handling varying neighbors differently (it was mostly doing it right in sum bp, looks like a code duplication issue) 
 - BPVariable marginals are now one-hots for max bp, to be consistent with factor marginals
 - Removed code duplication in BPRings
 - Removed some unused code and bad comments