Why won't the boolean modifier work properly?
It will be rather hard using Boolean in this case because there are a lot of self-intersecting parts in the mesh and modifier won't give expected results just after it's added; additional complexity is provided by form of the mesh.
It's possible to cut through it without using Boolean modifier, however form of the cup which should be cut out won't be taken into account.

Knife Project

To cut through this mesh use Knife Project tool. For details see How would you cut a shape out of an object using another object


Enter Edit mode of the cup's design, select its bottom, and separate it by selection (P > By Selection). The bottom part shouldn't be cut through. If skipping this step the hole will be all through the mesh.


Enter Edit mode for cylinder and delete everything but the top face.
In Object mode select ex-cylinder (now that Ngon), then select design of the cup, press Numpad 7 to enter Top View. 


Enter Edit mode of the highpoly cup and on the Toolshelf panel (T in 3D View) find Knife Project. After executing in the operator's options check Cut Through. This is done to make tool to cut through all mesh, not just what is seen from the current view.


If the inner part of the mesh shouldn't be filled with loops, then it's ready (you can recreate the cylinder and join it to "hide" the inner geometry). If this open geometry is undesired then you should manually select parts of loops and use Bridge Edge Loops, like this:




Boolean

It is possible to cut the cylinder out using modifier, though it's much more complex. It didn't work before because of self-intersections in the mesh; thus you should get rid of them.

To do that, in Edit mode select all and press Ctrl+F > Intersect. Make sure in operator's options check Self-Intersect. It's a kind of Boolean but in Edit mode. 

It made all intersected parts to be cut by each other. The only (easy one) thing left is to delete those parts which were cut.
Example of such selecting these "self-intersecting" parts is shown below:



Note that this is not the only part you should select in order to make Boolean work right afterwards. This is quite time-consuming process so prepare to use some selecting tools like Loop Select, Select Loop-Inner Region and so on.
Once these parts are deleted select all and access Mesh > Clean-Up > Delete Loose, and (there too) Degenerate Dissolve.
Note:  removing doubles will delete supporting vertices around intersecting parts, so shading and form of mesh can be corrupted.



Still the resulting mesh seems to cause Blender not responding sometimes, so it may be unnecessary complex and heavy. It's worth using 1-st way, leave some parts of geometry and hide them with cylinder of the cup itself.
You can take a look at the file if it meets your needs.