This entirely depends on what you are trying to accomplish with your solution. If you need this code to run fully trusted, the GAC is the simpler choice. However, if you don't require full trust on the assembly and want to be more restrictive in what the assembly can do, go the bin route. MSDN has a good description of each path (for 2007 but still relevant): http://msdn.microsoft.com/en-us/library/ms521365(v=office.12).aspx
One note that I would make is that SharePoint itself doesn't run all its code fully trusted. For instance the Microsoft.SharePoint.ApplicationPages assembly (the code behind for most of the _layouts pages) runs under WSS_Minium trust.
Also, if this code is only for your own organization, it really just depends on your coding practices within your organization. However, if this is code for distribution outside of your organization, I would go for the least amount of trust you need for your solution to run. This usually makes server admins happier. And if the code ends up on hosted services (like SharePoint Online), they usually make you justify higher trust levels.