app/scripts/app.js: Convert /product/:id to /product/:code

The API specs don't define ID for products, since the product code
already provides an immutable reference to a given product.  See
azurestandard/api-spec@6a2d0e62 (public.json: Add /products and
/product/{code}, 2014-11-26) for details.  From discussion on IRC
today, we may eventually change this again to use slugs based on the
product name, which is rumored to be better for search-engine
optization.
app/scripts/controllers.js: Get favorites from the API

We don't expose our Elasticsearch instance publically, so this change
lets folks outside our network see their favorites.

We still need to extract alternate sizes from product.repackaged,
which is currently just a list of product codes for the different
versions of the favorite product.
app/scripts/controllers.js: Get product details from the API

We don't expose our Elasticsearch instance publically, so this change
lets folks outside our network see products.

product.images is currently just a list of URLs.  We'll need to adjust
the backend logic to store descriptions for each image, and then
expose those descriptions with product.images[*].url and .description
(or some such).  Alternatively, we could use the product name for the
description of each image, which is easier (no need to add additional
info to the database) but less informative (no distinction between
images in the slideshow).

I'm using splice() (which has wide support [1]) and map() (which has
wide support for most browsers, but is only on IE v9+ [2]).  There's a
polyfill for map() [2], so we can use that if we need to support older
versions of IE.

[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
[2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
app/scripts/controllers.js: Add sizes to the favorites view

Following similar logic that I just added to the product-detail view.