Improve "Add Reviewer"/"Add Watcher" actions on /createreview

If a filter was first created for user X and path "", and then for
user X (i.e. same user) and path "/", submitting the review would
crash, due to filter duplication.  Fix this by normalizing empty
paths to "/".  Also add a placeholder text in the path input that
explains what empty means.

Also restructure the client-side code to make it easier to see
that it eliminates  duplicate or conflicting filters, by adding
all filters as properties of an object, where the property name is
made up of all the information that must be unique.

The UI is still rubbish, with no way to see what filters have been
added (other than through their effects on assignments) and no way
to remove previously added filters, but at least users will be
able to submit reviews without crashes.
Share "add filter" dialog code between {show,create}review.js

The dialogs were almost identical already.  The merged code has
class="sourcefont" on the input elements from showreview.js and
placeholder="..." from createreview.js.

The rest of the code was effectively identical, except for the
operation used to actually add the filters.
Call History.{push,replace}State with all three arguments

WebKit/Blink has the annoying bug that the third argument, if
omitted, defaults to the document's base URL instead of its
current URL.  And most Critic pages contain <base href="/">, so
whenever History.{push,replace}State is called with only two
argmuents, the resulting history entry has its URL set/changed
to /, which later on breaks history nagivation.